### Description

`IndexResolver` tries to create a tree structure for field names that contain dots (e.g. ECS) which can conflict with fields in other indices in which case all underlying fields end up being discarded as unsupported.

Consider field "file.name" as keyword in "index-1" and "file" as keyword in "index-2". This results in the following mapping from field caps:
```json
"indices": ["index-1", "index-2"],
"fields":
{
 "file.name":
 {
  "keyword":
  {
   "type": "keyword",
   "metadata_field": false,
   "searchable": true,
   "aggregatable": true,
   "indices": ["index-1"]
  },
  "unmapped":
  {
   "type": "unmapped",
   "metadata_field": false,
   "searchable": false,
   "aggregatable": false,
   "indices": ["index-2"]
  }
 },
 "file":
 {
  "keyword":
  {
   "type": "keyword",
   "metadata_field": false,
   "searchable": true,
   "aggregatable": true,
   "indices": ["index-2"]
  },
  "object":
  {
   "type": "object",
   "metadata_field": false,
   "searchable": false,
   "aggregatable": false,
   "indices": ["index-1"]
  }
 }
}
```

Notice that `file` is mapped both as an `object` in `index-1` and `keyword` in `index-2`. IndexResolver sees the conflict and thus discards as unsupported all the fields under it, including `file.name` hence why the ESQL query `where file.name is not null` fails.
When a projection is added `where file.name is not null |  keep file.name`, IndexResolver doesn't ask the mapping information for `file` which removes the conflict and thus `file.name` can be resolved.

The main fix here is to NOT discard fields under an object leaf as unsupported if they have no conflict. In this example `file.name` is mapped as keyword in one index and unmapped in the other so across all indices it will have the same type.
Furthermore listing the field as missing instead of say unsupported is incorrect.
x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/index/IndexResolver.java
UNKNOWN("UNKNOWN", "UNKNOWN");
        public static final EnumSet<IndexType> VALID_INCLUDE_FROZEN = EnumSet.of(STANDARD_INDEX, ALIAS, FROZEN_INDEX);
        public static final EnumSet<IndexType> VALID_REGULAR = EnumSet.of(STANDARD_INDEX, ALIAS);
        private final String toSql;
        private final String toNative;
        IndexType(String sql, String toNative) {
            this.toSql = sql;
            this.toNative = toNative;
        }
        public String toSql() {
            return toSql;
        }
        public String toNative() {
            return toNative;
        }
    }
    public record IndexInfo(String cluster, String name, IndexType type) {
        @Override
        public String toString() {
            return buildRemoteIndexName(cluster, name);
        }
    }
    public static final String SQL_TABLE = "TABLE";
    public static final String SQL_VIEW = "VIEW";
    private static final IndicesOptions INDICES_ONLY_OPTIONS = new IndicesOptions(
        EnumSet.of(Option.ALLOW_NO_INDICES, Option.IGNORE_UNAVAILABLE, Option.IGNORE_ALIASES, Option.IGNORE_THROTTLED),
        EnumSet.of(WildcardStates.OPEN)
    );
    private static final IndicesOptions FROZEN_INDICES_OPTIONS = new IndicesOptions(