First x post with another template then the others

It shows more than 3 posts because you used post_per_page when it should be posts_per_page (note the plural “posts”).

But actually, you can use the same query and use a counter to display the different template parts:

$loop = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 5,
) );

$c = 1; // post counter
while ( $loop->have_posts() ) : $loop->the_post();
    if ( $c < 3 ) : // the first and second posts
        get_template_part( 'loop-templates/blog-item-big' );
    else :
        get_template_part( 'loop-templates/blog-item-small' );
    endif;

    $c++;
endwhile;
/* Or a simpler loop..
$c = 1; // post counter
while ( $loop->have_posts() ) : $loop->the_post();
    $template="blog-item-" . ( $c < 3 ? 'big' : 'small' );
    get_template_part( 'loop-templates/' . $template );

    $c++;
endwhile;
*/

// not wp_reset_query()
wp_reset_postdata();