### Description

Currently every index delete task is processed individually. Additionally, they are marked at the `urgent` level. This leads to scenarios where a number of index delete tasks that are queued up very quickly can lead to starvation. We have seen these tasks delaying the processing of `node-join` tasks disrupting cluster state processing.
server/src/test/java/org/elasticsearch/cluster/metadata/MetadataDeleteIndexServiceTests.java
String index = randomAlphaOfLength(5);
        String alias = randomAlphaOfLength(5);
        IndexMetadata idxMetadata = IndexMetadata.builder(index)
            .settings(Settings.builder().put("index.version.created", VersionUtils.randomVersion(random())))
            .putAlias(AliasMetadata.builder(alias).writeIndex(true).build())
            .numberOfShards(1)
            .numberOfReplicas(1)
            .build();
        ClusterState before = ClusterState.builder(ClusterName.DEFAULT)
            .metadata(Metadata.builder().put(idxMetadata, false))
            .routingTable(RoutingTable.builder().addAsNew(idxMetadata).build())
            .blocks(ClusterBlocks.builder().addBlocks(idxMetadata))
            .build();
        ClusterState after = service.deleteIndices(before, Set.of(before.metadata().getIndices().get(index).getIndex()));
        assertNull(after.metadata().getIndices().get(index));
        assertNull(after.routingTable().index(index));
        assertNull(after.blocks().indices().get(index));
        assertNull(after.metadata().getIndicesLookup().get(alias));
        assertThat(after.metadata().aliasedIndices(alias), empty());
    }
    public void testDeleteBackingIndexForDataStream() {
        int numBackingIndices = randomIntBetween(2, 5);
        String dataStreamName = randomAlphaOfLength(6).toLowerCase(Locale.ROOT);
        ClusterState before = DataStreamTestHelper.getClusterStateWithDataStreams(
            List.of(new Tuple<>(dataStreamName, numBackingIndices)),
            List.of()
        );
        int numIndexToDelete = randomIntBetween(1, numBackingIndices - 1);
        Index indexToDelete = before.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, numIndexToDelete)).getIndex();
        ClusterState after = service.deleteIndices(before, Set.of(indexToDelete));