BUG: join MultiIndex with overlapping IntervalIndex level (#44096)
`BaseMultiIndexCodesEngine._extract_level_codes` relies on the assumption that
`get_indexer()` is always usable as any index level `is_unique`.  However, that
is not the case for overlapping `IntervalIndex` levels.  `get_indexer()` can
not be used on an `IntervalIndex` that `is_overlapping` even if it `is_unique`.

This patch uses `get_indexer_for()` instead.

~This patch checks if the index level is an overlapping `IntervalIndex` and then
calls `get_indexer_non_unique()` instead.~

~We should not switch to `get_indexer_non_unique()` for other index levels than
overlapping `IntervalIndex`, even though that actually would work as well.
That is because `get_indexer_non_unique()` comes with a performance penalty of
roughly 30% compared to `get_indexer()`, measured by simple `%timeit`
measurements.~

- [x] closes #44096 
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry

@johannes-mueller can you merge master and ping on green @jreback rebased

 thanks @johannes-mueller 