In my experience a 'bad' plan will often involve poor row estimations.
Sometimes there are techniques to improve that and sometimes not.
I would suggest that a new query hint could be introduced to allow a developer to directly influence the optimizer to set the expected number of rows from a logical join.
Select X.* , Y.* from X JOIN Y on X.ID = Y.ID (EXPECTEDROWS=100)
Would inform the optimizer that the developer expects the join to result in 100 rows.
This would allow for more stable and optimal plans when the optimizer 'gets it wrong'