Hi Brian,
Each specialization level adds 2 joins to the query plus the access rules. You can choose for some redundancy instead of specializations, but that is a difficult migration for a big existing application. You 'll first leave all specialization in the system, upgrade/move the data and in the next update remove the specializations. I guess it is no option in your case.
If the access rule is a basic XPath you can not optimize there. I have seen access rules over 4+ assocations which should be avoided if possible if you care about performance.
Only workaround I can think about is a 'net' securitystring or code which is used in access rules.
Have you Xpath constraints with OR statements? these will increase the load time of the query. Try to avoid these.