I think both approach are good. Trigger after purchase or check purchase in last day. There is something like "Made purchase in last X days"...
You can start process after purchase, but I would place wait step (1 days, few hours). Your customer will get invoice so you don't want to bombard them with e-mails.
So it would look like this:
- Customer buys a product - process is triggered
- Step evaluates Product A relationship - Custom macro or code can check if this product A has some relationship return TRUE or Product B ID (so you can reuse it in E-mail). If it is null or empty process ends
- Create wait step just to give some time to customer
- Send e-mail with offer for product B