One way to reduce the cost to the taxpayer and the cost of education, without reducing the quality would be to introduce a merit component even to need based assistance. Tell the kid who wants to study medieval history that he doesn't merit as much assistance as the kid who wants to be an engineer, and the kid who got C's in high school that he doesn't merit as much assistance as the kid who got A's.
By the way, my BA degree is in Medieval History, and my masters is in Information Systems -- I'm an engineer now. So your example made me smile.