Quello che hai è un UDF scalare (prende da 0 a n parametri e restituisce un valore scalare). Tali UDF in genere causano un'operazione riga per riga della query, a meno che non vengano chiamate con parametri costanti, con esattamente il tipo di degrado delle prestazioni che stai riscontrando con la query.
Vedi qui , qui e qui per spiegazioni dettagliate delle insidie delle prestazioni dell'utilizzo di UDF.