Why? Because it retains consistency across data types of char() being simply an array of byes.
Indexing by alphabetical index can often be used for character translation functions if nothing else...
MATLAB being loosely typed (and initially far more loosely than presently with all the relatively recent new data types) simply leaves the decision to the programmer to use the array as wanted instead of "getting in the way" if it is the intended purpose. OTOH, if it isn't intended, yes, there is the facility to shoot foot, self.
You don't illustrate the actual code in which you discovered this feature; but one would suggest perhaps the solution would have been to have used a cellstr or string data type instead of character array.
Function 'subsindex' is not defined for values of class 'string'.
Function 'subsindex' is not defined for values of class 'cell'.
for the latter, of course, if one dereferences a cellstr() array, one ends up with a char() array so that isn't quite as bulletproof...