After reviewing the list of Views hooks, I think hook_views_pre_render() is the one you can use to filter results before they are rendered.
/**
* Implements hook_views_pre_render().
*/
function MODULE_views_pre_render(ViewExecutable $view) {
if (!empty($view->result)) {
$entities = [
'your_custom_entity_id',
'another_entity_id',
];
foreach ($view->result as $key => $result) {
if (empty($result->_entity)) {
continue;
}
if (!in_array($result->_entity->getEntityTypeId(), $entities)) {
continue;
}
$access = \Drupal::entityTypeManager()
->getAccessControlHandler($result->_entity->getEntityTypeId())
->access($result->_entity, 'view', NULL, TRUE);
if (!$access->isAllowed()) {
unset($view->result[$key]);
}
}
}
}