You can hook onto parse_request
and trick WordPress into thinking it matched a page permalink if one exists with the same slug for a category term:
/**
* Override query for pages that match a category slug.
*
* @param WP $wp
*/
function wpse_177014_category_to_page ( $wp ) {
if ( ! empty( $wp->query_vars['category_name'] ) && get_page_by_path( $slug = $wp->query_vars['category_name'] ) ) {
if ( ! empty( $wp->query_vars['paged'] ) )
$page = $wp->query_vars['paged'];
else
$page="";
$wp->matched_query = "pagename=$slug&page=$page";
$wp->query_vars = array(
'pagename' => $slug,
'page' => $page,
);
}
}
add_action( 'parse_request', 'wpse_177014_category_to_page' );