Dann mach mal deinen Crossjoin mit 1000 Zeilen, das ergibt 1 Millionen Zugriffe.
Der Union macht da nur 4000 Zugriffe.

Den "lateral" nehme ich häufig als Ersatz für skalare Subselects, wenn man mehr als 1 Feld benötigt und dies nicht per Join erledigt werden kann, z.B. mit "order by xxx desc fetch first 1 rows only".
Funktioniert sehr gut bei einer terminierten Preisfindung.