### Elasticsearch Version

8.3

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

any

### Problem Description

Calling POST _features/_reset should reset all system indices, provided the user calling the API has a 'superuser' role or at least cluster 'manage' role.

However, the code that handles calling the individual system index reset operations isn't properly passing the ORIGIN header value, therefore many of the system index reset operations are rejected. 

### Steps to Reproduce

Simplest way to reproduce is to add a security role of any kind, causing the security index to be created and then attempt to call POST _features/_reset with a superuser.

### Logs (if relevant)

_No response_
server/src/main/java/org/elasticsearch/indices/SystemIndices.java
* access blocked in most cases, but this caused problems with certain APIs (see
         * <a href="https://github.com/elastic/elasticsearch/issues/74687">issue #74687</a>), so this access level was added as a
         * workaround. Once we no longer have to support accessing existing system indices, this can and should be removed, along with the
         * net-new property of system indices in general.
         */
        BACKWARDS_COMPATIBLE_ONLY
    }
    /**
     * Given a collection of {@link SystemIndexDescriptor}s and their sources, checks to see if the index patterns of the listed
     * descriptors overlap with any of the other patterns. If any do, throws an exception.
     *
     * @param featureDescriptors A map of feature names to the Features that will provide SystemIndexDescriptors
     * @throws IllegalStateException Thrown if any of the index patterns overlaps with another.
     */
    static void checkForOverlappingPatterns(Map<String, Feature> featureDescriptors) {
        List<Tuple<String, SystemIndexDescriptor>> sourceDescriptorPair = featureDescriptors.values()
            .stream()
            .flatMap(feature -> feature.getIndexDescriptors().stream().map(descriptor -> new Tuple<>(feature.getName(), descriptor)))
            .sorted(Comparator.comparing(d -> d.v1() + ":" + d.v2().getIndexPattern())) // Consistent ordering -> consistent error message
            .toList();
        List<Tuple<String, SystemDataStreamDescriptor>> sourceDataStreamDescriptorPair = featureDescriptors.values()
            .stream()
            .filter(feature -> feature.getDataStreamDescriptors().isEmpty() == false)
            .flatMap(feature -> feature.getDataStreamDescriptors().stream().map(descriptor -> new Tuple<>(feature.getName(), descriptor)))
            .sorted(Comparator.comparing(d -> d.v1() + ":" + d.v2().getDataStreamName())) // Consistent ordering -> consistent error message
            .toList();
        // This is O(n^2) with the number of system index descriptors, and each check is quadratic with the number of states in the
        // automaton, but the absolute number of system index descriptors should be quite small (~10s at most), and the number of states
        // per pattern should be low as well. If these assumptions change, this might need to be reworked.
        sourceDescriptorPair.forEach(descriptorToCheck -> {