PERF: MultiIndex.argsort / MultiIndex.sort_values
- [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/v1.6.0.rst` file if fixing a bug or adding a new feature.

Perf improvement in `MultiIndex.argsort` and `MultiIndex.sort_values` for the vast majority of cases (where `MultiIndex.argsort` is called without additional passthrough numpy parameters).

Also, an xfail was removed because np.lexsort does not complain about complex dtype arrays whereas np.argsort will complain about an object array of tuples containing complex and non-complex dtypes. 

ASV added:

```
       before           after         ratio
     [fa211d47]       [b2fea756]
     <main>           <perf-multiindex-argsort>
-      81.0±0.9ms       27.9±0.7ms     0.34  multiindex_object.SortValues.time_sort_values('Int64')
-        96.9±2ms       2.00±0.2ms     0.02  multiindex_object.SortValues.time_sort_values('int64')
```




> Could you add a Benchmark for Nullable dtypes too?

Added a benchmark for nullable Int64 and updated the timings in the summary. However, the nullable index used in the asv does not contain any pd.NA values as numpy will raise if it encounters pd.NA. That is true for numpy.argsort (with a list of tuples) and numpy.lexsort so this isn't new behavior. Can handling pd.NA be an enhancement/bug fix for a separate PR? Thanks @lukemanley 