加算より論理和の方が多少マシなはず。キャストと + 256 は不要。
コンパイラの最適化にも左右されるだろうけど。

int data = (b[0] & 0xFF) | ((b[1] & 0xFF) << 8) | ((b[2] & 0xFF) << 16) | ((b[3] & 0xFF) << 24);