BUG (string dtype): fix inplace mutation with copy=False in ensure_string_array
Further follow-up on https://github.com/pandas-dev/pandas/issues/54654, https://github.com/pandas-dev/pandas/pull/54687, https://github.com/pandas-dev/pandas/pull/57212, because we still had the issue when `copy=False` was passed (which happens when casting to any of the string dtypes).

The added tests failed without the actual code change.

(smaller change extracted from https://github.com/pandas-dev/pandas/pull/59685/)

xref https://github.com/pandas-dev/pandas/issues/54792
small questions, otherwise LGTM Thanks @jorisvandenbossche 