I have some kinds of this experieces.
For your query,
SELECT table1.numCustID, table2.strPhoneNumber, table3.strPhoneNumberCalled
FROM dbo.table1 table1
INNER JOIN dbo.table2 table2
ON table1.numBillID = table2.numBillID
INNER JOIN dbo.table3 table3
ON table2.numBillDtlID = table3.numBillDtlID
WHERE table1.numCustID = '5555'
AND table2.strPhoneNumber = '5555555555'
AND table3.strPhoneNumberCalled = '1234561234'
ORDER BY table3.dtmCalled DESC
I would rewrite it to:
SELECT t1.numCustID, t2.strPhoneNumber, t3.strPhoneNumberCalled
FROM
(Select * from dbo.table1 WHERE dbo.table1.numCustID = '5555'
) as t1
INNER JOIN
(Select * from dbo.table2 WHERE dbo.table2.strPhoneNumber = '5555555555'
) as t2
ON t1.numBillID = t2.numBillID
INNER JOIN
(Select * from dbo.table3 WHERE dbo.table3.strPhoneNumberCalled = '1234561234') as t3
ON t2.numBillDtlID = t3.numBillDtlID
ORDER BY table3.dtmCalled DESC
So, no temp table needed but performance is ok.