ENH: Implement more efficient merge for arrow strings
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.


lets see if this passes ci

```
def random_string():
    return ''.join(random.choices(string.ascii_letters, k=7))


df = pd.DataFrame({"a": pd.Series([random_string() for _ in range(3_000_000)], dtype=pd.ArrowDtype(pa.string())), "b": 1})
df2 = pd.DataFrame({"a": pd.Series([random_string() for _ in range(1_000_000)], dtype=pd.ArrowDtype(pa.string())), "c": 1})

df.merge(df2, how="outer")
```


Main: 1.4701979160308838
PR: 0.6503970623016357
A whatsnew note would be good otherwise LGTM Thanks @phofl 