Ну, все зависит от конкретной ситуации. Объединение их всех в одно условие дает желаемый результат, но может оказаться неэффективным, если это будет проверено внутри цикла или любого другого блока кода, который выполняется действительно много. Хорошо разделить такое условие на подусловия (несколько операторов if), если это будет выполняться много, а вероятности того, что a, b, c и d имеют требуемое значение, не равны. Или если некоторые условия стоят дороже, чем другие (возможно, вызовы некоторых функций.
Например, если вероятность того, что a не будет равно 1, очень велика, разумно было бы сформулировать это так:
if(a == 1)
if(...)
Компилятор не знает о вероятностях или о том, сколько стоит конкретный вызов, поэтому вам решать, важно ли оптимизировать условие или нет.
Например, если вы выполняете какой-то эвристический поиск, и это условие, при котором цель достигнута, то разбиение вашего условия может дать вам приличное повышение производительности.
Если вы точно знаете, что эта часть кода будет использоваться не часто, то обязательно воспользуйтесь одним условием, потому что читаемость кода гораздо важнее, чем пара наносекунд.