### Description

I noticed that when I run `GET my_ilm_index/_ilm/explain`, the order of the returned JSON seems without much logic.

In my case, we have 18 underlying indices, and they are returned as
```
my_ilm_index-000010
my_ilm_index-000011
my_ilm_index-000012
my_ilm_index-000001
my_ilm_index-000006
my_ilm_index-000017
my_ilm_index-000018
my_ilm_index-000007
my_ilm_index-000008
my_ilm_index-000009
my_ilm_index-000002
my_ilm_index-000013
my_ilm_index-000014
my_ilm_index-000003
my_ilm_index-000015
my_ilm_index-000004
my_ilm_index-000016
my_ilm_index-000005
```

While of course, strictly speaking, json has no order, it's still inconvenient to just get a quick look at what's happening.

Could this get an ordering?

**Details:**
Elastic 7.16.2 in docker
Kibana 7.16.2 in docker
Request done via Kibana/Dev tools/console (on Chrome, on Windows 10)
x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/action/TransportExplainLifecycleAction.java
String policyName = indexMetadata.getLifecyclePolicyName();
        String currentPhase = lifecycleState.phase();
        String stepInfo = lifecycleState.stepInfo();
        BytesArray stepInfoBytes = null;
        if (stepInfo != null) {
            stepInfoBytes = new BytesArray(stepInfo);
        }
        String indexName = indexMetadata.getIndex().getName();
        Long indexCreationDate = indexMetadata.getCreationDate();
        
        String phaseDef = lifecycleState.phaseDefinition();
        PhaseExecutionInfo phaseExecutionInfo = null;
        if (Strings.isNullOrEmpty(phaseDef) == false) {
            try (
                XContentParser parser = JsonXContent.jsonXContent.createParser(
                    XContentParserConfiguration.EMPTY.withRegistry(xContentRegistry),
                    phaseDef
                )
            ) {
                phaseExecutionInfo = PhaseExecutionInfo.parse(parser, currentPhase);
            }
        }
        final IndexLifecycleExplainResponse indexResponse;
        if (Strings.hasLength(policyName)) {
            
            if (onlyErrors == false
                || (ErrorStep.NAME.equals(lifecycleState.step()) || indexLifecycleService.policyExists(policyName) == false)) {
                Long originationDate = idxSettings.getAsLong(LIFECYCLE_ORIGINATION_DATE, -1L);
                indexResponse = IndexLifecycleExplainResponse.newManagedIndexResponse(
                    indexName,