CROSS APPLY is MSSQL-specific… Microsoft on APPLY
APPLY causes the right-side query to execute once per result in the left-side query. CROSS only considers matching rows like INNER JOIN. Using OUTER considers all rows in left-side query. The extra rows hurt.
I recommend you reformulate your right-side query to explicitly accept NULLs instead of using OUTER APPLY.