I've spent many hours dealing with strangeness related to these
issues. I like your proposed solutions, and I wouldn't mind updating
my codebases with this kind of breaking change.
As far as rolling out, I suggest adding a deprecation warning now to
all has_many :through calls that will change, and maybe backport those
deprecation warnings to the 2-3-stable branch. Many people still have
not upgraded to Rails 3 and keeping the 2-3-stable branch up to date
with deprecations will help a lot. I'd also suggest releasing this in
a minor release (as opposed to a tiny release).