Collect all events in one year

OK, your events are already sorted by date, so all you have to do is to ignore header, previous event had the same year.

Let’s also try to avoid all that spaghetti code, you’ve posted in question:

<?php
    $previous_year = false;
    while ( $myrow = mysqli_fetch_array($result) ) :
        $event_datetime = strtotime($myrow['event_date']);
?>
    <?php if ( date('Y', $event_datetime) != $previous_year ) : ?>
    <p><b><?php echo date('Y', $event_datetime); ?></b></p>
    <?php endif; ?>

    <p><?php echo date('d.m.Y', $event_datetime); ?>
        <a class="link" href="https://wordpress.stackexchange.com/questions/341245/article.php?event_id=<?php echo esc_attr($myrow["event_id']); ?>">
            <?php echo esc_html($myrow['article_title']); ?>
        </a>
        <b><a class="link" href="speaker.php?speaker_id=<?php echo esc_attr($myrow['speaker_id']); ?>">
            <?php echo esc_html($myrow['speaker_degree']); ?>
            <?php echo esc_html($myrow['speaker_name']); ?>
            <?php echo esc_html($myrow['speaker_surname']); ?>
            <?php echo esc_html($myrow['speaker_patronymie']); ?>
        </a></b>
    </p>
<?php
        $previous_year = date('Y', $event_datetime);
    endwhile;
?>

Another thing is… You shouldn’t use mysqli_* functions in WP. There already is WPDB class to connect to DB and perform DB queries and you really should be using it instead.