I don't think I understood the proposal correctly.
Most of the complaints about setOutputMarkupId() I see are around component re-rendering in ajax requests, which usually doesn't involve calling getMarkupId() (just target.add(component)).
Even if it did (say, we changed target.add(Component) to target.add(String), which would be a terrible idea, of course), it's called in the event handling time, not in page construction/render time, thus having no effect.
I don't see a solution to this, besides setting it to true on every component by default (either by a custom listener or by a built-in setting). And then, you'll still have to call setOutputPlaceholderTag() when the components are initially invisible.
I vote to make both true by default, or add some one-line setting to do it