PERF: DataFrame.insert
- [ ] closes #xxxx
- [ ] tests added / passed
- [ ] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [ ] whatsnew entry

```
from asv_bench.benchmarks.indexing import *

self = InsertColumns()
self.setup()

%timeit self.setup(); self.time_insert()
32.5 ms ± 382 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)   # <- master
20.7 ms ± 744 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)   # <- PR

%timeit self.setup(); self.time_insert_middle()
37.2 ms ± 407 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)  # <- master
25.1 ms ± 513 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)  # <- PR

```