I would say that the alternative to that crappy process is something like "gradual hiring" (sorry, I'm the guy whose accent can be spread on bread) - you just start working with a guy, giving him basic isolated tasks, and as he successfully progresses with his work, task are getting more and more complicated (salary, permissions as well). After few months of such freelance-ish work you can know for sure that this dude is compatible with the team, able to solve problems, able to learn. And only then he becomes an employee with offer, benefits and SO.
I know a company (profitable, no-VC, small private hw/sw business) that has been practicing that for years. The scheme is quite simple: they "rent" people at bodyshops in Russia (it's relatively cheap there), work with them for some time and then offer them relocation to the HQ, paying some penalty to the bodyshop.
Another well-known company has different version of this: they just hire everyone after very basic sanity check. It's pretty easy to get in, but at the same time it's even easier to be fired. Turnover at the company is horrible, but there's very strong core of managers/designers/devs, that survived all battles.
My point is there's no way you can find out for sure the candidate is good for a) company b) project c) codebase d) team etc etc, unless he's clearly crazy/arrogant/stinks or whatever. So maybe that "gradual hire" is the answer.
P.S.: Being at the other side of hiring process sucks too. May be even worse.