I come from a farming background. On the farm, when the work has to be done, it has to be done. The crop will wither away and be worthless if you spend any time waiting. That often means hiring people who are not skilled to get the job done.
On a grain farm, at least, good help are worth their weight in gold. I see some farms offering $50/hr. just to find talent. But in the absence of those good people, you still need someone to do the work. That often means settling on someone who is unskilled for, say, $10/hr. You just end up hoping the reduced pay will offset the additional costs of employing them.
The technology sector is different. The constraints on time are completely artificial. If a really good programmer isn't available today, the project can wait until he is available next month. Unlike other industries, here there is simply no reason to hire the less skilled programmer, even at a reduced salary.
To me, one of the big problems in the process is the lack of a feedback loop. Since recruiters and interviewers rarely give honest feedback (probably for good reason), it is hard for an applicant to know if they're applying to the right jobs or not. And faced with this lack of information that would otherwise allow you to be more effective and only apply to a few jobs that would be a good fit, the strategy becomes just spamming your resume everywhere until you get a response. On the company's end, this means that you have this extra mass of applications of wildly varying quality because no one has a clue what you're really looking for.
How could this feedback loop be improved? I'm not sure.