Das Problem ist und bleibt die Verwendung von UDF-Ergebnissen in Where usw.
Hier erfolgt halt immer ein Tablescan und ist deshalb nicht optimierbar.
Deterministic hilft in diesem Fall auch nicht. Dies spart ggf. den Aufruf der UDF aber nicht den Tablescan. Wobei die Anzahl der Caches nicht unendlich ist.
Durch die Verlagerung in eine View ist das von außen noch nicht mal sichtbar.
Die UDF wird vor der Prüfung der restlichen Where's aufgerufen!