«Более эффективный» - это расплывчатое понятие, потому что существует множество способов его измерить. Я полагаю, что большинство людей думают о времени выполнения. С другой стороны, большинство людей не думают об эффективности памяти. Оператор switch с широко расположенными тестовыми значениями может быть ужасным бременем памяти, если компилятор не достаточно умен, чтобы интерпретировать его как цепочку if-else.
Многое можно сказать и об эффективности программирования, включая поддержку и удобочитаемость. Как отметил sblundy, оператор switch может быть более понятным о намерениях программиста, чем цепочка if-else. Комментарии могут уравновесить это, но это требует больше работы для программиста, а также существует риск того, что комментарии и код не будут совпадать (особенно после нескольких циклов обслуживания).
Я полагаю, что большинство людей следуют тому стилю, которому их учили (или говорят следовать), не слишком задумываясь об этом. В остальное время, я думаю, большинство решений о переключении по сравнению с if-else основаны на том, какой из них лучше всего соответствует мышлению программиста в момент генерации кода.