J'avais fini d'écrire la question lorsque la réponse m'a frappé, alors je poste quand même pour le partage des connaissances !
J'ai réalisé que la valeur de retour de la fonction metaphone était UTF8.
La comparaison avec un champ latin1 engendrait évidemment une surcharge de performances assez lourde.
J'ai remplacé l'affectation de variable par :
SET @metaphone_val:= CONVERT(double_metaphone(p_parameter) USING latin1);
Maintenant, la requête s'exécute aussi vite que prévu.