Unfortunately I don't know your outside dialing rules in USA, but in Belarus outside dialing without prefix works fine.
For example, in Minsk city we have 7-digits local numbers beginning from 2, 3, 5 (i.e. 2xx-xx-xx, 3xx-xx-xx, 5xx-xx-xx). I program LCR which may have any dial number (9, 7080 or so), then in LCR,5 program outside numbering plan. Then I make public or private libraries 2, 3, 5, which contain strings like these:
DIAL NUM 2 (or 3, or 5).
OUT_TK (SPECIFIC_TK) 7080.
User lifts handset, hears station dialtone (usual or stutter), dials outside local number 2xx-xx-xx. Coral sees the first digit is lib number, and automatically sends it into Routing Access 7080. After receiving from user all digits according to LCR, 5 numbering plan Coral sends all the number to specified trunk group.
In such way you can perform outside dialing without prefix and listen station dialtone after lifting handset (and dial internal number of their mail, if you need so).
I beg your pardon for such a big post, maybe I don't understand your problem clear (English is not my native language, of course, and I have never dealed with American telephone standards).
Anyway, I hope my post may be useful in some way.