\hline ist bei longtable so definiert, dass an der Stelle explizit ein Seitenumbruch erlaubt ist und im Falle eines Seitenumbruch die Linie sowohl unten auf dieser als auch oben auf der nächsten Seite gesetzt wird. Es ist derzeit AFAIK nicht möglich, einen Seitenumbruch an einer \hline zu verhinden. Man kann zwar duchaus \\*\hline\nopagebreak angeben, aber aus dem genannten Grund, kommt dabei das \pagebreak zu spät.
Du suchst also so eine Art \hline* (analog zu \\*), das keinen Seitenumbruch erlaubt. Das wäre ein Feature-Request zu
longtable.
Es gibt aber einen Workaround: \cline statt \hline verwenden:
\documentclass[10pt]{article}
\usepackage{booktabs}
\usepackage{longtable}
\begin{document}
\begin{longtable}{c|c}
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&b\\
a&bcccc\\*\cline{1-2}\nopagebreak
a&bdddd\\
a&b\\
a&b\\
\end{longtable}
\end{document}
BTW: Vergiss vertikale Linien in Tabellen, die stören fast immer mehr als sie nützen.