codice:
$sqlquery = "SELECT title, cat, 
             date_format(start_date,\"%d-%m-%Y\") as start, 
             date_format(end_date,\"%d-%m-%Y\") as end
             FROM $table 
             WHERE  end_date between '$dal' and '$al' + interval 1 day 
             ORDER BY $result end_date ";
se dai lo stesso nome del campo all'alias questo campo viene sovrascritto e l'order by ti fara' l'ordinamento sulla stringa resa da date_format invece che sul campo data.

il where non ne viene affetto perche' viene risolto prima dei nomi di campo e quindi fara' la sua funzione sul valore scritto in tabella, mentre l'order by lavora sui valori estratti.

Ovviamente i dati li troverai nei campi alias start e end.