Please help me to win the battle with 2 column loop by category

You should not use query_posts more than one time. It will create errors. You have to use wp_query.

Here is what it says in wordpress codex:

query_posts( is meant for altering the main loop. Once you use
query_posts(), your post-related global variables and template tags
will be altered. Conditional tags that are called after you call
query_posts() will also be altered – this may or may not be the
intended result.

http://codex.wordpress.org/Function_Reference/query_posts

<?php $query_one = new WP_Query('cat=3&amp;showposts=1'); ?>
<?php while($query_one->have_posts()) : ?>
<?php
$postcount++;
if( ($postcount % 2) == 0 ) : // skip 'even' posts
    $wp_query->next_post();
else :
?>
<?php $query_one->the_post(); ?>

                    <?php if ( function_exists( 'get_the_image' ) ) { get_the_image( array( 'custom_key' => array( 'post_thumbnail' ), 'default_size' => 'full','image_class' => 'alignleft', 'width' => '120', 'height' => '120' ) ); } ?>


<?php endif; ?>
<?php endwhile; ?>
<?php wp_reset_postdata();  // Important to reset it when done ?> 
</div>

<?php $postcount = 0; rewind_posts(); ?>

<div class="even-column">
<?php $query_two = new WP_Query('cat=3&amp;showposts=2'); ?>
<?php while($query_two->have_posts()) : ?>
<?php
$postcount++;
if( ($postcount % 2) != 0 ) : // skip 'odd' posts
    $wp_query->next_post();
else :
?>
<?php $query_two->the_post(); ?>

                    <?php if ( function_exists( 'get_the_image' ) ) { get_the_image( array( 'custom_key' => array( 'post_thumbnail' ), 'default_size' => 'full', 'image_class' => 'alignleft', 'width' => '60', 'height' => '60' ) ); } ?>

<?php endif; ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); // After every wp_query ?> 
</div> 

You can read more about it here:
http://codex.wordpress.org/Class_Reference/WP_Query