Currently the response for TableLocations returns a separate copy of the TSInfoPB for every replica. These PBs are relatively large and include string UUIDs, hostnames, etc. For large tables, a response may have up to 3000 replicas. In most clusters, the table itself will be on far fewer than 3000 unique hosts, so it makes sense to return the replicas as indexes into a response-level list rather than separately duplicate the TS info in each of the replica PBs.
Additionally, we can consider a reader-writer lock on TSDescriptor so that these requests can proceed more in parallel.