PERF: improve perf of conversion to string arrays
`f"{val}"` is faster than `str(val)`. Utilizing this in the tight string conversion loop in `ensure_string_array` gives a nice performance boost.

```python
>>> int_arr = np.arange(1_000_000)
>>> %timeit pd.Series(int_arr, dtype="string")
850 ms ± 8.65 ms per loop  # master
455 ms ± 8.65 ms per loop  # this PR
>>> ser = pd.Series(int_arr)
>>> %timeit ser.astype("string")
890 ms ± 8.65 ms per loop  # master
505 ms ± 8.65 ms per loop  # this PR
```

The same improvement is given when we use `dtype=str`.
