Чтобы не палить номер B, можно использовать выдуманный номер, хранящийся в БД и привязанный к абоненту.
В asterisk любой звонок можно обработать в файле плана набора так:
exten => _FAKENUMBER,1,Dial(SIP/trunkname/REAL_NUMBER)
то бишь позвоня на астериск на номер FARENUMBER вызов будет переведен на REAL_NUMBER.
Файл плана набора можно генерировать динамически скриптом.
Можно поставить на астериск модуль lua и присать логику на Lua,
Можно как я - писать на псеводязыке AEL. Соответственно от типа плана набора и ьудет зависеть то, как вы будете поступать - генерировать каждый раз новый extensions.conf или обращаться к БД напрямую из скрипта AEL/LUA.