Insert template-part inside the content

The main issue I see here is the usage of get_template_part() function in that context.
It’s not really the best way to go as we’re going to filter the content of your posts and you would probably need to get the markup of your banner, not output it immediately. Read more here.

I would suggest to keep the baner markup in a variable or return value of a separate function, like so:

function get_banner_html() {
    return '<div class="baner">Your baner HTML here</div>';
}

Then, you could easily filter the content of all posts with WordPress hook:

function insert_banner_into_content( $content ) {

    // make sure we're affecting only posts
    if ( 'post' !== get_post_type() ) {
        return $content;
    }

    // split content by paragraph tag
    $paragraphs = explode( '<p>', $content );

    // continue only when post has 3 paragraphs or more
    if ( count( $paragraphs ) < 3 ) {
        return $content;
    }
    // add banner after 3rd paragraph
    $paragraphs[2] .= get_banner_html();

    // return modified content
    return implode( '<p>', $paragraphs );
}
// hook it up!
add_filter( 'the_content', 'insert_banner_into_content' );