How to pull posts into two columns with different image sizes using $counter variable?

You could do something like this to simplify it. IF We’re in this loop we’re either going to have both a left AND right column OR at least a left column, if we have less than 4 posts, so we can move a container div outside the main conditional:

if ( $td_query->have_posts() ) {

    while ( $td_query->have_posts() ) {

        $td_query->the_post();

        if ( $counter == 1 || $counter == 4 ) {

            $output .= ( $counter == 1 ) ? '<div class="left-col">' : '</div><div class="right-col">';
            $output .= '<div class="big-image">';
            $output .= the_post_thumbnail( 'big' ); // 1 big image
            $output .= '</div>';

        } else {

            $output .= '<div class="small-images">';    
            $output .= the_post_thumbnail( 'small' ); // 2 small images
            $output .= '</div>';

        }
        $counter++;
    }

    $output .= '</div>'; 
}

Skimming over your original code it looks like that should work for you so I’m not exactly sure what problems your currently having with it. Either way hopefully the above works for you!