Refactor inherit_names to work by inheritance
We face a lot of mypy errors due to the dynamic nature of [`inherit_names`](https://github.com/pandas-dev/pandas/blob/master/pandas/core/indexes/extension.py#L91). See issue #31716 and the discussion that evolved there.

**Summary:**
In the past, we added explicit type annotations to the respective classes, but this approach doesn't scale.

As mypy is a static type checker, it cannot understand the dynamic nature of inherit_names by design. The only alternative would be to refactor `inherit_names` to work by inheritance instead of dynamic assignments. This would make the code more understandable to humans as well.