1- As written by BGO, there are 2 categories of DICOM tags: The ones that are indexed in the SQL database (those are the "main DICOM tags", whose list is in the aforementioned "DicomMap.cpp"), and the ones that are not indexed (those ones must be read from the storage area when accessed).
Because DICOM tags are extremely numerous, we only index the subset of DICOM tags that are the most commonly used in medical imaging applications (hence "main DICOM tags"). The other tags are only accessed when needed.
For instance, when doing a query, Orthanc will first filter the indexed tags (i.e. the "main DICOM tags") using its SQL index. In a second time, if "StorageAccessOnFind" configuration option is "Always", the non-indexed tags will only be read for the remaining candidates. It is thus highly advised to do queries that include indexed tags in order to limit the number of possible candidates.
2- This is explained in the documentation of the "StorageAccessOnFind" option:
// Performance setting to specify how Orthanc accesses the storage
// area during C-FIND. Three modes are available: (1) "Always"
// allows Orthanc to read the storage area as soon as it needs an
// information that is not present in its database (slowest mode),
// (2) "Never" prevents Orthanc from accessing the storage area, and
// makes it uses exclusively its database (fastest mode), and (3)
// "Answers" allows Orthanc to read the storage area to generate its
// answers, but not to filter the DICOM resources (balance between
// the two modes). By default, the mode is "Always", which
// corresponds to the behavior of Orthanc <= 1.5.0.
"StorageAccessOnFind" : "Always",
=> Orthanc will always use its database index wherever possible. If some queried tag is not indexed (i.e. if it is not a "main DICOM tag"), the behavior depends on this option.