I worked on those. My recollection is that, while the decimal and floating point instruction sets were extra-cost options, all S/360s had index registers. However, not all S/360 instructions could use them. For instance, the Move Immediate instruction could not use an index register because the right half of the immediate byte took up the bit field that would have specified which index register to use.
Also, the assembler had a glitch with regard to index registers. If you were not using an index register, and you forgot to put a comma before your intended base register, the assembler would output an instruction that had an index register but no base register. Your program would still work, but would be slower because the CPU would waste an extra cycle adding in zero. Someone I knew wrote a utility program in assembly language to go through old source code and fix instances where coders had made that mistake.
You’re right about the index registers. Below the S/360 Model 25 the instruction set was limited and I/O was different. The Model 20 was interesting to say the least. :-)
Only RX instructions have a position for an index register. For those instructions the storage address is specified as D2(X2,B2) - and as you note, the registers are positional such that for base+displacement, you have to code D2(,B2) to indicate the absence of an index register.