The perverse incentives this creates are massive. Universities hire scientists rather than teachers in order to get their hands on half the scientist's grants [1]. Scientists waste their time masquerading as teachers because they can't get grants if they don't work for a university [2]. This is harmful both to science (I'm not doing research in class) and students. Of course, they don't put much effort into teaching because they are judged on their ability to get grants. Actual teachers are squeezed out, since there is no room for them.
My proposed solution? Completely decouple research and teaching. The NSF can subsidize science, the DOE can subsidize universities, and teaching institutions will no longer have an incentive to hire scientists as teachers.
[1] If a scientist gets a grant, the university will take about half as "overhead".
[2] Not strictly true, due to a few national labs, but close enough.