You can fool LaTeX into believing that it has already loaded package foo with options bar and baz by defining a command with name "ver@foo.sty" and one with name "opt@foo.sty" in a suitable way; so
\makeatletter
\newcommand{\dontusepackage}[2][]{%
\@namedef{ver@#2.sty}{9999/12/31}%
\@namedef{opt@#2.sty}{#1}}
\makeatother
will prevent both loading the package and also keep LaTeX happy with the options possibly passed to it.
However, \dontusepackage[bar,baz]{foo} must be issued before \input{preamble}.
I'm in general contrary to "do-it-once-and-for-always" preambles, which raise problems such as this one. There's no such thing as a universal preamble and later developments make some packages obsolete or at least superseded by new ones.
Just copy preamble.tex into the working directory and change it for what's needed for the current document you're writing.
UPDATE 2023
The LaTeX kernel now has \disable@package@load so the incantation is
\makeatletter
\newcommand{\disablepackage}[2]{%
\disable@package@load{#1}{#2}%
}
\newcommand{\reenablepackage}[1]{%
\reenable@package@load{#1}%
}
\makeatother
to be called by
\disablepackage{foo}{}
In the second argument you can put code to be executed if there is an actual request to load the package, possibly a message to be printed on the console. There is also the possibility to reenable the loading later.