The way I handle this is putting a lot of problems on the exam. It makes the average score tend to be low (although there are always a few percent that get them all right). But, it spreads out the remainder. I curve the exam to compensate for that.
Though I've never been in the position where I had to write exams yet, and it's been a long time I've passed any, I recently starting thinking that such an approach would be tho only valid way to assess an exam.
If you make the exam big enough that nobody can solve it entirely, you actually have a full scaling of each student's ability, and you can accurately tell who performed best.
A couple of problem should be solved though, and sanity checks should be introduced for this system to be viable. Bad students will end up literally HATING the best for bringing them down. I suppose a non-linear scale (log?) should be used to convert students' performance back into grades. Also, in a particularly bad class, all student may perform horribly bad, but one of them, being slightly better, would end up getting the highest mark regardless.
That said, I have to counterbalance this point by remembering how pleasing it was to finish a 3-hours exam an hour in advance and leave the room early to go slack off somewhere else. Also, finishing early gives you time to read over and check all your answers again, hunting for obvious mistakes.
Thus, I suppose this technique may be interesting to try out on larger scales, but it has pro and cons (which I just realised).