Porque é que escrever demasiadas declarações condicionais é considerado como uma má prática de programação?
Se é a opção mais eficiente, então não é uma má prática. Fazer qualquer coisa que tenha uma solução mais simples e elegante prontamente disponível é uma má prática.
Neste caso, um switch gigante pode muitas vezes ser substituído por uma interface ou permitir que uma classe tenha sua própria responsabilidade, etc.
Por exemplo, se você tiver algo como isto:
Isto irá funcionar. O código será um pouco robusto desde que os valores só sejam adicionados e não editados, e na verdade é até bastante eficiente, já que as comparações de bits levam praticamente tempo zero. Mas isto vai ficar fora de controle, difícil de navegar, e você já tem que definir estas classes de carros de qualquer maneira.
Em vez disso, vamos começar com algo como isto:
Again, provavelmente tivemos isto de qualquer forma, apenas sem o método do númeroOfCylinders, e por isso agora o nosso primeiro método é assim:
Agora imagine por um momento que somos uma loja nacional de autopeças, e temos literalmente milhares de carros de várias marcas, modelos, guarnições, etc. Que se/else se tornaria um enorme monstro, impossível de ler, extremamente difícil de adicionar ou remover com segurança, etc.
Então, novamente, nem sempre é uma má prática, e às vezes vamos precisar de um grande interruptor ou algo do género, mas normalmente há uma maneira mais fácil de nos escondermos lá.
EDIT: Há muitos comentários sobre ter um número extremamente grande de combinações de carros (potencialmente milhões ao longo da história) e classes de implementação de carros falhando aqui. Claro que a um certo ponto, as classes não vão funcionar, e você estaria armazenando arquivos planos em um banco de dados e usando um acessor.
A minha resposta tinha a intenção de mostrar a armadilha de usar declarações condicionais muito longas, não como uma tentativa real de construir uma arquitetura de loja de auto peças. Se você trabalha em uma grande loja de autopeças, por favor não tome minha resposta simples como base da sua arquitetura de software :)