The only other way I can think to do this would be with some sort of ARS routing. Use 9+Number for your DID, and then something else to mask based on call back number. 51+number for Acme, 52+Number for Doofenschmirtz Evil Incorporated, 53+Number for Wayne Enterprises, etc.
The only catch is that it is still user dependent and they will still want buttons for speedcalls labelled as each company so I'm not sure that really saves you anything.
In the call center, if the same agents always call from the same company (or agency or queue) then I would use Associated Directory Number like Sube100 suggests. If they have to select based on circumstance I think buttons are the way to go because it decreases the chance of a misdial.