Realmente esas operaciones se transforman en inmediatas en assembler, por lo que sí es recomendable hacerlas. En cambio un módulo al menos es una operación separada.
Por otro lado, es mejor:
Código:
for(i=0; i<longi; i++)
cad[i] = (i%2==0) ? tolower(cad[i]) : toupper(cad[i]);