API: Revert 57042 - MultiIndex.names|codes|levels returns tuples
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] [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
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Manual revert of #57042

Closes #57607

The behavior described in that issue seems quite undesirable, especially for a breaking change.

cc @mroeschke 
I would be OK reverting this but would like:

1. To expose `FrozenList` in `pandas.api.typing`
2. Deprecate the `union` and `difference` methods > I would be OK reverting this but would like:
> 
> 1. To expose `FrozenList` in `pandas.api.typing`
> 2. Deprecate the `union` and `difference` methods

Okay with doing this in a follow up? (I likely won't be able to return to this for ~1 week in any case) > Okay with doing this in a follow up? (I likely won't be able to return to this for ~1 week in any case)

Yup that's good > Deprecate the union and difference methods

what's the reasoning for those deprecations? > what's the reasoning for those deprecations?

Mainly cleanup. IMO if we keep `FrozenList` and make it available as a public API, that API should be minimal Thanks @rhshadrach 