### Description

This is related to #96757.

Right now downsampling uses a thread pool with a single running thread (disallowing concurrent downsampling operations at the transport level) and an unbounded queue of waiting threads, queueing and waiting to be executed. We need to explore options around using multiple running threads here.
x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/downsample/TransportDownsampleIndexerAction.java
@Override
    protected ClusterBlockException checkRequestBlock(
        ClusterState state,
        DownsampleIndexerAction.Request request,
        String[] concreteIndices
    ) {
        return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_WRITE, concreteIndices);
    }
    @Override
    protected void doExecute(
        Task task,
        DownsampleIndexerAction.Request request,
        ActionListener<DownsampleIndexerAction.Response> listener
    ) {
        new Async(task, request, listener).start();
    }
    @Override
    protected DownsampleIndexerAction.ShardDownsampleRequest newShardRequest(
        int numShards,
        ShardRouting shard,
        DownsampleIndexerAction.Request request
    ) {
        return new DownsampleIndexerAction.ShardDownsampleRequest(shard.shardId(), request);
    }
    @Override
    protected DownsampleIndexerAction.ShardDownsampleResponse shardOperation(
        DownsampleIndexerAction.ShardDownsampleRequest request,
        Task task
    ) throws IOException {
        IndexService indexService = indicesService.indexService(request.shardId().getIndex());