PERF: building MultiIndex with categorical levels
- [x] closes #22044
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

```python
df = pd.DataFrame({
    'a': np.arange(1_000_000, dtype=np.int32),
    'b': np.arange(1_000_000, dtype=np.int64),
    'c': np.arange(1_000_000, dtype=float),
}).astype({'a': 'category', 'b': 'category'})

%timeit df.set_index(['a', 'b'])
```
On my machine, this takes ~20ms. The current implem takes 140ms.

Any suggestion for tests ?