Use una subselección con condicionales para cambiar el fighter_id que está buscando a column_a si está en column_b, de esa manera, simplifica sus operaciones y se une a la consulta externa:
SELECT
(
CASE
WHEN a.winner = a.f_a THEN 'Win'
WHEN a.winner = a.f_b THEN 'Loss'
WHEN a.winner IS NULL THEN a.method
END
) AS result,
b.name AS opponent,
a.method AS method,
c.event_name AS event,
c.event_date AS date
FROM
(
SELECT
IF(fighter_b = $fighter_id, fighter_b, fighter_a) AS f_a,
IF(fighter_b = $fighter_id, fighter_a, fighter_b) AS f_b,
winner,
method,
event
FROM
fights
WHERE
$fighter_id IN (fighter_a, fighter_b)
) a
INNER JOIN
fighters b ON a.f_b = b.fighter_id
INNER JOIN
events c ON a.event = c.event_id
ORDER BY
c.event_date DESC
Además, si el campo ganador es nulo, simplemente repita el campo de método. De esa manera, cuando desee agregar otro tipo de método en el que el ganador sea nulo en su sistema, no tendrá que seguir agregando más comprobaciones condicionales a su CASE
declaración.