As Ronen said, you went a little overboard that with the test data. For most questions of this type we rarely need more than 20 rows.
Anyway, here is a query, which may do what you are looking for. This is a recursive CTE, and the extra column datastr serves to prune combinations we have already found.
WITH rekurs AS (
SELECT erpcustomer_bk, sf_accountID,
cast(erpcustomer_bk + ' ' + sf_accountID as nvarchar(MAX)) AS datastr
FROM temp.Erpx
WHERE erpcustomer_bk = '5|75388|US-CA'
UNION ALL
SELECT E.erpcustomer_bk, E.sf_accountID,
r.datastr + '///' + E.erpcustomer_bk + ' ' + E.sf_accountID
FROM rekurs r
JOIN temp.Erpx E ON E.erpcustomer_bk = r.erpcustomer_bk OR
E.sf_accountID = r.sf_accountID
WHERE charindex(E.erpcustomer_bk + ' ' + E.sf_accountID, r.datastr) = 0
)
SELECT erpcustomer_bk, sf_accountID
FROM rekurs
I am not sure that this is the most efficient solution. Maybe it is better to run a loop where you store the partial results in a temp table. Then you can toggle on which column you are making lookups on. But I leave it to others to explore that area.