IDisposable

かなり独自解釈なのかもしれませんが、

任意のタイミングで実行可能なファイナライザを規定するための interface

と、考えています。なぜ、GC による回収を待たずにオブジェクトの参照を利用してまで Dispose() を呼ぶ必要があるかというと、オブジェクトがカプセルするすべてのリソースを GC が管理する手段を持たないためです。
具体的に、.NET の GC が管理するのはマネージドリソースだけであり、アンマネージドリソースについては何の管理手段も持ちません。このため、アンマネージドリソースの管理はそれをカプセル化する個々のオブジェクトに委ねられています。