Optimise nested loops used to compare champions which have abilities which have effects
Well the inner loop is something like 120*5*5 => 1200 cycles and I really don't know if it can become an issue with today's PC power. But improvements can always be made, and reading your code, I see that some lines are duplicated :

   foreach (CounterChampion champion2 in returnList)
    {
        foreach (string effects2 in champion2.Abilities.SelectMany(ability2 =&gt; ability2.Effects))
        {


As as first step toward performance and code structuration, I suggest to compute the ability/effect in returnList once, and reuse it after. Typically, you may have something like this :

class EffectByChampion{
  CounterChampion Champion,
  List&lt;string&gt; Effects
}


then you may fill the following list ONCE

List&lt;EffectByChampion&gt;


and after you may reuse it 3 times through your existing code with :

    foreach (string effects1 in ability1.Effects)
    {
      foreach(EffectByChampion effectByChampion in EffectByChampionList)
      {
       foreach(string effects2 in effectByChampion)


This way, you have 3 foreach loops removed. 
Hope this help !