Seen in an exception stack trace: we are wrapping `ApiFilteringActionFilter` around itself many times, once per filtered action, so effectively every action is doing a linear scan of the filtered actions, implemented recursively. I'm pretty sure a hashmap would be more efficient, and would avoid inflating the stack so much too.

```
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:86) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.action.support.ActionFilter$Simple.apply(ActionFilter.java:53) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at co.elastic.elasticsearch.api.validation.PublicSettingsValidationActionFilter.apply(PublicSettingsValidationActionFilter.java:101) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.core.api.filtering.ApiFilteringActionFilter.apply(ApiFilteringActionFilter.java:53) ~[?:?]
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:84) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
    at org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.lambda$applyInternal$3(SecurityActionFilter.java:163) ~[?:?]
    at org.elasticsearch.action.ActionListenerImplementations$DelegatingFailureActionListener.onResponse(ActionListenerImplementations.java:212) ~[elasticsearch-8.11.0-SNAPSHOT.jar:?]
```
server/src/main/java/org/elasticsearch/action/ActionModule.java
actions.register(IndicesAliasesAction.INSTANCE, TransportIndicesAliasesAction.class);
        actions.register(UpdateSettingsAction.INSTANCE, TransportUpdateSettingsAction.class);
        actions.register(AnalyzeAction.INSTANCE, TransportAnalyzeAction.class);
        actions.register(ReloadAnalyzerAction.INSTANCE, TransportReloadAnalyzersAction.class);
        actions.register(PutIndexTemplateAction.INSTANCE, TransportPutIndexTemplateAction.class);
        actions.register(GetIndexTemplatesAction.INSTANCE, TransportGetIndexTemplatesAction.class);
        actions.register(DeleteIndexTemplateAction.INSTANCE, TransportDeleteIndexTemplateAction.class);
        actions.register(PutComponentTemplateAction.INSTANCE, TransportPutComponentTemplateAction.class);
        actions.register(GetComponentTemplateAction.INSTANCE, TransportGetComponentTemplateAction.class);
        actions.register(DeleteComponentTemplateAction.INSTANCE, TransportDeleteComponentTemplateAction.class);
        actions.register(PutComposableIndexTemplateAction.INSTANCE, TransportPutComposableIndexTemplateAction.class);
        actions.register(GetComposableIndexTemplateAction.INSTANCE, TransportGetComposableIndexTemplateAction.class);
        actions.register(DeleteComposableIndexTemplateAction.INSTANCE, TransportDeleteComposableIndexTemplateAction.class);
        actions.register(SimulateIndexTemplateAction.INSTANCE, TransportSimulateIndexTemplateAction.class);
        actions.register(SimulateTemplateAction.INSTANCE, TransportSimulateTemplateAction.class);
        actions.register(ValidateQueryAction.INSTANCE, TransportValidateQueryAction.class);
        actions.register(RefreshAction.INSTANCE, TransportRefreshAction.class);
        actions.register(FlushAction.INSTANCE, TransportFlushAction.class);
        actions.register(ForceMergeAction.INSTANCE, TransportForceMergeAction.class);
        actions.register(ClearIndicesCacheAction.INSTANCE, TransportClearIndicesCacheAction.class);
        actions.register(GetAliasesAction.INSTANCE, TransportGetAliasesAction.class);
        actions.register(GetSettingsAction.INSTANCE, TransportGetSettingsAction.class);
        actions.register(IndexAction.INSTANCE, TransportIndexAction.class);
        actions.register(GetAction.INSTANCE, TransportGetAction.class);
        actions.register(TermVectorsAction.INSTANCE, TransportTermVectorsAction.class);
        actions.register(MultiTermVectorsAction.INSTANCE, TransportMultiTermVectorsAction.class);
        actions.register(TransportShardMultiTermsVectorAction.TYPE, TransportShardMultiTermsVectorAction.class);
        actions.register(DeleteAction.INSTANCE, TransportDeleteAction.class);
        actions.register(UpdateAction.INSTANCE, TransportUpdateAction.class);
        actions.register(MultiGetAction.INSTANCE, TransportMultiGetAction.class);