... die Crux mit den UDFs ist, dass der Optimizer nicht sieht, was innerhalb der UDF passiert; das ist sowas wie eine fixe, nicht (genauer gesagt: selten) auflösbare Klammerung.
Schwierig für den Optimizer ist auch die Art des Concat, das ist auch wieder eine starre Klammerung. Letztlich werden dann Abfragen rekursiv ausgeführt, was insbesondere mit dem Aufbau von temporären Indexen tödlich werden kann.
Aus Deiner UDF könnte man auch eine View machen und die dann in die übergeordnete View einbinden, dann kommt der Optimizer bei der Optimierung dran und kann das in seinen Access Plan einbeziehen.

D*B