As a general rule generalizations will always give you performance hits and should be avoided unless you have to. Generalizations four deep is imho a fault in your architecture that could have been solved in a different way.
And operations like not in combination with or and again not is also a guarantee for performance hits.
I would go back to the drawing board and think things through. Why do I need 4 level deep generalizations? Can it be solved with a entity over reference? Are the not operations necesarry? Can it be solve by booleans?
Regards,
Ronald