I have this scenario running with 4 companies, we haven't set up the auto attendant yet, since we have good phone coverage and haven't had the time to sit through the complex planning and recording.
Each incoming DID line is sent to a ring group, each extension is assigned to the ring group with the outgoing caller ID matching the company name with the listed phone number. We set up ranges to define each company ring group in the extensions:
100 range Tax group
200 range Insurance group
300 range CPA firm group
400 range Systems group
So 100,200,300,400 is the receptionist on a Cisco SPA508g, with one line button assigned to each extension, if the receptionist wants to make an outgoing call using that main phone line as the outgoing phone number she will use the appropriate line button 100,200,300 etc. So any employee that needs multi company presence will have multiple extensions, such as 118,218,318,418 as an example. An insurance agent would have only one extension assigned, 215 for example.
The incoming lines are assigned by incoming rules and the outgoing rules handle the extension groups, and with V10 it's easier with extension groups.
With this design there is an easy visual control as to what company line is ringing, clients have a minimal chance of even being aware of the multi company setup.
The nice advantage is that all 4 companies share the outgoing channels on the SIP trunks. You can adjust the amount of channels required depending on market needs on a quick basis. Say next month when tax season begins or if the insurance agency has a successful marketing campaign in the spring and needs more available channels. Imagine the time and expense that used to take with the old PSTN phone line orders.
Let me know if you have any questions.