Let's just throw this out: If a query is big and confusing, it's probably also big and confusing for the optimizer.
Should I specify the join type and index name for each join to keep the original execution plan? Is that the best way?
No, because these hints may not always be the right choice.
It would probably make more sense to inherit the part of the query for which you get a good plan and copy it to a dump
From there, add your other shortcuts to the temporary table. That way, the optimizer has less bad decisions to make. Sure, you may have to put an index on the temp table, but that's a lot less painful than putting together a bunch of brittle cues.