Here is the recursive CTE solution.
Not sure if it will be any quicker at all, and you still need to know the max iteration depth to put in an exit condition.
WITH
recursiveCTE AS (
SELECTorderid,
o.partykey,
p.personId,
1 AS incrementNbr
FROM #orders o
INNER JOIN #personIds p
ON p.partykey = o.partykey
UNION ALL
SELECT r.orderid,
p2.partykey,
p2.personId,
incrementNbr + 1 AS incrementNbr
FROM recursiveCTE r
INNER JOIN #personIds p1
ON p1.partykey = r.partykey
INNER JOIN #personIds p2
ON p2.personId = p1.personId
AND p2.partykey <> r.partykey
WHERE incrementNbr < 10
)
SELECT orderid,partykey,min(incrementNbr) AS nbrOfIterations
FROM recursiveCTE
GROUP by orderid,partykey
ORDER BY orderid, min(incrementNbr),partykey