I think, one way you could do this is to use a combination of chan_local and the Queue application.
Create a dialplan context containing extensions for the two phones and set the callerid appropriately before the dial command.
exten => 100,1,Set(CALLERID(number)=123)
exten => 100,n,Dial(SIP/301)
exten => 101,1,Set(CALLERID(number)=456)
exten => 101,n,Dial(DAHDI/g1/07123456789)
Then create a queue and rather than adding the SIP devices as agents to the queue, use the Local channel;
member => Local/100@agents
member => Local/101@agents
Then back in your main dialplan, use the Queue application to call the phones rather than the Dial application.
I think this should work,