### Description

As discussed in https://github.com/elastic/elasticsearch/issues/98995, queries will not have an implicit order - as such the CSV spec framework would have to account for this.
As some tests will want to check the order while others might not, it's best to have a flag or marker when the out of order occurs and use a different assertion method.
x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/CsvTests.java
List<String> columnNames = Expressions.names(coordinatorPlan.output());
        List<String> dataTypes = new ArrayList<>(columnNames.size());
        List<Type> columnTypes = coordinatorPlan.output()
            .stream()
            .peek(o -> dataTypes.add(EsqlDataTypes.outputType(o.dataType())))
            .map(o -> Type.asType(o.dataType().name()))
            .toList();
        List<Driver> drivers = new ArrayList<>();
        List<Page> collectedPages = Collections.synchronizedList(new ArrayList<>());
        Map<String, List<String>> responseHeaders;
        // 
        try {
            LocalExecutionPlan coordinatorNodeExecutionPlan = executionPlanner.plan(new OutputExec(coordinatorPlan, collectedPages::add));
            drivers.addAll(coordinatorNodeExecutionPlan.createDrivers(sessionId));
            if (dataNodePlan != null) {
                var logicalTestOptimizer = new LocalLogicalPlanOptimizer(
                    new LocalLogicalOptimizerContext(configuration, new DisabledSearchStats())
                );
                var physicalTestOptimizer = new TestLocalPhysicalPlanOptimizer(new LocalPhysicalOptimizerContext(configuration));
                var csvDataNodePhysicalPlan = PlannerUtils.localPlan(dataNodePlan, logicalTestOptimizer, physicalTestOptimizer);
                exchangeSource.addRemoteSink(exchangeSink::fetchPageAsync, randomIntBetween(1, 3));
                LocalExecutionPlan dataNodeExecutionPlan = executionPlanner.plan(csvDataNodePhysicalPlan);
                drivers.addAll(dataNodeExecutionPlan.createDrivers(sessionId));
                Randomness.shuffle(drivers);
            }
            responseHeaders = runToCompletion(threadPool, between(1, 10_000), drivers);
        } finally {
            Releasables.close(() -> Releasables.close(drivers), exchangeSource::decRef);
        }
        return new ActualResults(columnNames, columnTypes, dataTypes, collectedPages, responseHeaders);