As B. Alvn said,
-비 cannot be used alone, since it's a suffix, and
요금 is an independent noun (They both originate from Chinese, by the way.)
요금 is mostly interchangable with the suffix
-료, for example,
- 통행 요금 = 통행료 (latter is common)
- 전기 요금 = 전기료 (former is common)
- 수도 요금 = 수도료 (former is common)
- 입장 요금 = 입장료 (latter is common)
though my perception of the prevalence thing could be disputed.
-비 contains the meaning of
비용, which translates to expense, and is generally not interchangable with
요금 I think. This is because
요금 implies that it's money to be paid for a service that you were(will be) provided with, while
-비 does not necessarily.
However in some cases they are interchangable.
One example where
요금 are interchangable though is
버스비. Also, people often refer to the toll they pay at toll gates on roads as
톨비, which is a kind of
In the top four examples in your question, you cannot substitute
요금. As for
-비 is clearly not interchangable with
생활비 refers to living expenses in general, and it doesn't directly involve any sort of specific services.
As for the last two examples however, you can say
전화비 instead of
가스 요금 and
전화 요금, and actually
전화비 are more common than
가스 요금 and
So I think there indeed is a rule regarding when to use which, but it is also heavily dictated by people's habits.