I played with this issue when writing a custom app to capture inbound Caller ID and then push it out on a SIP trunk to a cell phone so the original caller info wasn't lost...
I had luck by including BOTH the following in the Trunk Definition:
trustrpid=yes
sendrpid=yes
and in a Custom App by using the following:
exten => _*000X,1,Set(CALLERID(name)="WHOMEVER")
exten => _*000X,n,Set(CALLERID(num)=1234567890)
exten => _*000X,n,SIPAddHeader(P-Asserted-Identity:"${CALLERID(name)}"<${CALLERID(num)}>)
exten => _*000X,n,Dial(SIP/${CELL}@${PROVIDER},,,)
I got this to work with some SIP Carriers that stated Caller ID couldn't be set by the endpoint.