Denis,
Eu sou a favor das exceções porque elas existem pra isso e funcionam muito bem. Além disso, a questão de performance - que parece ser seu questionamento - é insignificante por dois motivos. Primeiro, porque validação de usuário é interação do usuário que, naturalmente, já é lenta. Segundo, porque ela só ocorre em caso de erro, que é o menos comum.
Além disso, neste caso, o que você vai ganhar em facilidade de manutenção e leitura de código compensa.
Mas, de fato, não tenho muita experiência. Gostaria de saber outras opiniões, inclusive sobre essas justificativas - se fazem sentido.