\defineshorthand{"|}{\penalty1000--\hskip0pt} would work in Cambrian"|Ordovician, but as David says, not in \hyphenation; you have to use the shorthand every time you typeset such a word.
As well, you might actually want to say the following, depending on the typographical traditions of your language:
\defineshorthand{"|}{\penalty1000\discretionary{--}{}{--}\penalty10000\hskip0pt}
The command \discretionary takes 3 arguments and it typesets #3 if no linebreak occurs at that place, and it typesets #1<end-of-line>#2 if linebreak occurs at that place.
Complete example showing the different break variants:

\documentclass{article}
\pagestyle{empty}
\usepackage[ngerman,english]{babel}
\useshorthands{"}
\addto\extrasenglish{\languageshorthands{ngerman}}
\defineshorthand{"|}{\penalty1000\discretionary{--}{}{--}\penalty10000\hskip0pt}
\begin{document}
\begin{tabular}{p{4cm}p{3.5cm}p{3cm}}
Hellohello Cambrian"|Ordovician World text text text text text text text
&
Hellohello Cambrian"|Ordovician World text text text text text text text
&
Hellohello Cambrian"|Ordovician World text text text text text text text
\end{tabular}
\end{document}
\hyphenationor define rules for the compound that differ from the two separate words – David Carlisle Feb 21 '13 at 21:54