You have column concatenation that prevents any use of indexes
Try NOT EXIST, which will support two columns separately
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
After that check your indices or course ...
This is a good use of EXCEPT (ORDER BY ends as UNION: thanks @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
source share