PERF: join on unordered CategoricalIndex
- [x] [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
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [x] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [x] Added an entry in the latest `doc/source/whatsnew/v2.2.0.rst` file if fixing a bug or adding a new feature.

existing test: `test_join_with_categorical_index`


```
import pandas as pd
import numpy as np

categories = [f"cat_{i:03}" for i in range(1000)]

idx1 = pd.CategoricalIndex(np.repeat(categories, 1000), categories=categories)
idx2 = pd.CategoricalIndex(categories[100:200], categories=reversed(categories))

df1 = pd.DataFrame({"val1": 1}, index=idx1)
df2 = pd.DataFrame({"val2": 2}, index=idx2)

%timeit df1.join(df2)

# 129 ms ± 7.93 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)   -> main
# 28.4 ms ± 1.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)  -> PR
```
Thanks @lukemanley 