ENH: Improve performance for df.__setitem__ with list-like indexers
- [x] closes #37954
- [ ] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Reindexing the Block Manager improves the performance significantly. I hope I have not missed anything, concerning the reindexing of the blocks. 
Time spent in ``_ensure_listlike_indexer`` is pretty low now.
timeit result for the ops methods:

```
In [20]: %timeit setitem(x, x_col, df)
1.09 ms ± 9.65 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [21]: %timeit concat(x, x_col, df)
293 µs ± 4.29 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
```

Should we add tests here? I have added an asv to capture this case.

cc @jbrockmendel 