Bene, il documento fornisce i motivi esatti quando apparirà "Uso temporaneo":
Le tabelle temporanee possono essere create in condizioni come queste:
Se è presente una clausola ORDER BY e una clausola GROUP BY diversa, o se ORDER BY o GROUP BY contiene colonne di tabelle diverse dalla prima tabella nella coda di join, viene creata una tabella temporanea.
DISTINCT combinato con ORDER BY potrebbe richiedere una tabella temporanea.
Se utilizzi l'opzione SQL_SMALL_RESULT, MySQL utilizza una tabella in-memorytemporary, a meno che la query non contenga anche elementi (descritti più avanti) che richiedono l'archiviazione su disco.
Una rapida scansione mostra che soffri del n. 1.
E questo blog dal 2009 dice che "usare filesort" significa che l'ordinamento non può essere eseguito con un indice. Dal momento che stai ordinando in base a un campo calcolato, anche questo sarà vero.
Quindi, questo è ciò che è "sbagliato".