add an optimisation for intersection with a union. Improve check for emptiness to not force pending unions unless necessary