Sounds like your ESN, SPN, NPA and NXX tables are a mess.
For starters, I like to use SPN when I need to make an *exception* to normal outbound dialing rules (i.e., 411, 911, international, etc.)... and not use it to create rules for normal outbound dialing. Once you do that - things get complicated and next thing you know you have a big SPN table of exceptions to your NPA/NXX tables. The fewer SPN entries, the better.
I see problems out there a lot where either customers or install/design techs make things much more complicated than they used to be. NPA/NXX tables worked great back in the day when long distance was 25 cents per minute for LD, 20 cents for in-state, 15 cents for intra-LATA, etc. But with LD plans costing practically nothing and local calls free over PRI's these days - all that work to develop least-cost routing with different carriers is just wasted effort. Long distance calling is very competitive these days. Don't like AT&T? Switch over to Windstream.
That said, go into LD 86, print out your ESN, and in LD 90, print out your SPN, NPA and NXX tables. See where the calls you're running into trouble with are being routed and work it from there. It may just end up you need to route calls to NXX 315 over a different carrier to make it work. I would also do an enhanced trace on a TN making a call to a 315 exchange and even turn up D-channel messaging for the route the call is going out over - see where the failure lies in your PBX.
I rarely see AC2 in use these days outside of large multisite enterprise settings where they had an access code for telco and an access code for their large internal telephone network. If you don't need it - I'd disable AC2. Why make things more complicated?