Você tem uma concatenação de colunas que impede qualquer uso de índices
Tente NOT EXISTS, que suportará as 2 colunas separadamente
SELECT distinct
o.casino_id, g.game_id
FROM
game g
INNER JOIN
Bet b ON g.game_id = b.game_id
INNER JOIN
CasinoUser u ON b.user_id = u.user_id
INNER JOIN
onewalletcasino o ON u.casino_id = o.casino_id
WHERE
game_start between dateadd(mi, -180, getdate())
and dateadd(mi, -5, getdate())
and
b.[status] <> 'P'
AND
NOT EXISTS (SELECT *
FROM
thirdpartysettlecalled tp
WHERE
tp.[status] = 'Y'
AND
tp.casino_id = o.casino_id AND tp.game_id = g.game_id)
ORDER BY
casino_id
Depois disso, verifique seus índices ou curso...
Este é um bom uso de EXCETO também (ORDER BY termina como UNION:graças a @Damien_The_Unbeliever)
SELECT distinct
o.casino_id, g.game_id
FROM
game g
INNER JOIN
Bet b ON g.game_id = b.game_id
INNER JOIN
CasinoUser u ON b.user_id = u.user_id
INNER JOIN
onewalletcasino o ON u.casino_id = o.casino_id
WHERE
game_start between dateadd(mi, -180, getdate())
and dateadd(mi, -5, getdate())
and
b.[status] <> 'P'
EXCEPT
SELECT tp.casino_id, tp.game_id
FROM thirdpartysettlecalled tp
WHERE tp.[status] = 'Y'
ORDER BY
casino_id