Avevo finito di scrivere la domanda quando la risposta mi ha colpito, quindi pubblicando comunque per la condivisione delle conoscenze!
Mi sono reso conto che il valore di ritorno della funzione del metafono era UTF8.
Il confronto con un campo latin1 stava ovviamente comportando un sovraccarico di prestazioni piuttosto pesante.
Ho sostituito l'assegnazione variabile con:
SET @metaphone_val:= CONVERT(double_metaphone(p_parameter) USING latin1);
Ora la query viene eseguita alla velocità che mi aspetterei.