PERF: groupby with string dtype
- [x] closes #41596 
- [ ] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry

```python
In [1]: import numpy as np
   ...:    ...: import pandas as pd
   ...:    ...: pd.__version__
   ...:    ...:
   ...:    ...: cols = list('abcdefghjkl')
   ...:    ...: df = pd.DataFrame(np.random.randint(0, 100, size=(100, len(cols))), columns=cols)
   ...:    ...: df_str = df.astype(str)
   ...:    ...: df_string = df.astype('string')

In [2]: %timeit df_str.groupby('a')[cols[1:]].last()
2.88 ms ± 70.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [3]: %timeit df_string.groupby('a')[cols[1:]].last()
3.27 ms ± 12.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)  #PR
54.4 ms ± 244 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)    #master