Is it possible to completely replace a post with an action/filter?

You can try with using pre_get_posts

add_action(‘pre_get_posts’,’alter_query’);

function alter_query($query) {
//gets the global query var object
global $wp_query;

//gets the front page id set in options
$front_page_id = get_option('page_on_front');

if ( 'page' != get_option('show_on_front') || $front_page_id != $wp_query->query_vars['page_id'] )
    return;

if ( !$query->is_main_query() )
    return;

$query-> set('post_type' ,'page');
$query-> set('post__in' ,array( $front_page_id , [YOUR SECOND PAGE ID]  ));
$query-> set('orderby' ,'post__in');
$query-> set('p' , null);
$query-> set( 'page_id' ,null);

//we remove the actions hooked on the '__after_loop' (post navigation)
remove_all_actions ( '__after_loop');

}