Как варианты:
1. Обязательно ли искать оранжевый индикатор во всей области изображения, а не в одном ожидаемом месте?
2.
mss.mss()
- обязательно ли каждую итерацию захватывать экран заново?
3. Преобразование в hsv точно нужно?
4.
time.sleep(0.05) # Проверяем цвет каждые 100 мс
- что то не клеится в Ваших показаниях, на основание чего указано 50мс?
Короче,
профилировщик в зубы и бегом искать узкие места самостоятельно.