SQL Join slower than subquery on View with a Function
When you join on the field in the view which is generated by the function, SQL will need to scan the entire table and execute the function for every row in order to do the join, so this will inevitably be much slower than the equivalent set based operation.

You can improve matters a lot using a computed column.  The result of your function will be computed and cached by SQL each time dependent data is changed.