A composite index serves any query using a leftmost prefix of its columns, which means three separate indexes are frequently one index somebody did not notice.
-- these three
KEY (customer_id)
KEY (customer_id, status)
KEY (customer_id, status, placed_at)
-- are all served by the third one alone.
-- the first two are pure write cost.
-- and what the third does NOT serve:
WHERE status = 'paid' -- no leading column
WHERE customer_id = 4 AND placed_at > ? -- gap at status
The gap case is the one worth internalising: skipping a column in the middle means the index can only be used up to the gap, so customer_id narrows and placed_at is a filter on the results. Ordering the columns by selectivity is the usual advice and is secondary to ordering them so that the prefixes match the queries you actually run — an index nobody’s query has a prefix of is decoration.