Range Extraction Algorithm for Muti-Part aka Composite Indexes in MySQL
Historically, MySQL has kept the relevant algorithms simple, even if less than optimal.  In particular, OR has been poorly optimized.  5.7 and 8.0 have new code, but I don't know if your examples have improved any.

EXPLAIN FORMAT=JSON sometimes gives clues.  Also, see the "Optimizer Trace".

If you have sample data, use the Handler counts to deduce whether they are well optimized:  http://mysql.rjweb.org/doc.php/index_cookbook_mysql#handler_counts.

But, be aware that MySQL will often do a table scan instead of using an obvious index.  This is legitimate because of the cost of bouncing between the BTree for the secondary index and the BTree that contains the data.  Typically, if more than 20% of the index needs to be touched, it will prefer to do a table scan.  (The "20%" is no a hard-coded number, but is a gross simplification of the "cost-based" model that is used.)

Search for mysql cost based optimization.  There have been a few articles written on the topic.