A filter on pre_get_posts
should do it.
function hide_author_wpse_138491($qry) {
$exc = 123;
if (
!is_admin()
&& !is_singular()
) {
$qry->set('author','-'.$exc);
}
}
add_action('pre_get_posts','hide_author_wpse_138491');
This should exclude results from the author with ID = 123 on all front end pages except for “single” pages, which sound like what you are aiming for– ie, to “completely hide all posts by author X from the search, category, taxonomy pages etc.”