Das Problem ist eigentlich nur dann, wenn deine UDF's in Where/Group by/Order By oder auch in " join ... on udf(...) = ..." verwendet werden.
Hierfür sind UDF's definitiv nicht geeignet und optimierbar.

Müssen Ergebnisse von UDF's aber auf diese Weise verwendet werden, so kann dies nur per Trigger mit Berechnung des Ergebnisses in einem neuen Feld/anderer Datei passieren, so dass über das Ergebnis auch ein Index gelegt werden kann.

Zugriffe innerhalb einer UDF werden auch separat optimiert.