Binary search in a (sorted) array is very fast, so your method looks good to me if the groups and indices are fixed, so that the array has to be built only once (or infrequently, compared to the number of lookups).
If the set of groups changes frequently then a different data structure (e.g. some tree) might be better suited instead of rebuilding the array on each change.
As I said in the comment, I would replace the dictionary by another array (of the same size as the first one)
[0] = "A"
[1] = "B"
[2] = "C"
...
and then just map the index found in the first array to the corresponding group via the second array.
This may be marginally faster, and may be easier to maintain because the "upper limits" for each group are not stored in two places.