O ponto de interrogação é o operador ternário, que é praticamente um bloco if-else compacto.
// condição ? retorno-se-verdadeira : retorno-se-falsa;
sb.append(i % 2 == 0 ? (char) (ch & 95) : (char) (ch | 32));
Ou seja, se o resto da divisão de i por 2 for 0, anexe no StringBuilder (char) (ch & 95), senão, anexe (char) (ch | 32).
Sobre as operações bitwise, elas fazem exatamente o que você quer:
(char) ('A' | 32) // 'a'
(char) ('a' | 32) // 'a'
(char) ('A' & 95) // 'A'
(char) ('a' & 95) // 'A'
Esses operadores ( &, |, ^, ~, <<, >>, >>> ) operam diretamente nos bits de valores inteiros (byte, short, int, long). Um char também pode ser representado como um inteiro, portanto é compatível. O cast para char antes da expressão pode parecer redundante, mas é necessário devido ao fato de que o resultado de uma operação bitwise é um inteiro.