DenisVladimirovich, то что MS выпилили Thread.Abort а затем и Thread.AbortInternal, который умельцы приспособились дергать через рефлексию, прозрачно намекает нам, что они не хотят иметь дело с прерванными потоками в CoreCLR. Видимо придется делать через volitile + break, либо через Task + CancellationToken (что по сути то же самое).
krka92, REPEATABLE READ и SERIALIZABLE по идее тоже дадут вам желаемый результат, но вы получите блокировку update в 1м случае и полную блокировку на изменение во 2м случае для всех данных которые вы читаете. С этим надо быть осторожным, хотя мне кажется, они у вас тоже должны быть запрещены.
1) подводный камень - подзапросы. В общем случае миллион подзапросов медленнее чем один джоин.
2) не эффективен
3) взять ответ Константин Цветков
4) неразумно. Разумно делать одним запросом
5) индекс поможет читать таблицы частично. Если запрос будет вычитывать клиентов по id, то вам нужен индекс customer.id и order.customer_id
PS. Реализация для postgres и для mysql одинаковая