Oh, you just load by half words instead of bytes. This is actually a lot more restricting about how long your data table indexes are and where you data table starts. ldrh requires the offset it's loading a half-word from to be "halfword aligned" or divisible by two. Anyways, a skeleton would look like this:
If you want to load byte by byte, but the last index is a half word for whatever reason, then you'll need to do an extra check like this:
Both ways are fine, the second way is a lot more flexible in terms of offset alignment (because it can work with any offset) but as you can probably tell, it takes longer to go through the entire table because it's reading byte at a time, while the first one is reading half words at a time. If you don't really care about time (not that big of a deal for relatively smaller tables), the second one is much superior.