You can just remove the \if@firstcolumn test from the marginpar handler so the note is always added on the left, then arrange that the column sep is larger than marginpar width

\documentclass[twocolumn,a5paper]{article}
\setlength\columnsep{4cm}
\addtolength\oddsidemargin{2cm}
\setlength\marginparwidth{3cm}
\makeatletter
\def@addmarginpar{@next@marbox@currlist{@cons@freelist@marbox
@cons@freelist@currbox}@latexbug@tempcnta@ne
\if@twocolumn
% always \if@firstcolumn
@tempcnta\m@ne
% \fi
\else
\if@mparswitch
\ifodd\c@page \else@tempcnta\m@ne \fi
\fi
\if@reversemargin @tempcnta -@tempcnta \fi
\fi
\ifnum@tempcnta <\z@ \global\setbox@marbox\box@currbox \fi
@tempdima@mparbottom
\advance@tempdima -@pageht
\advance@tempdima\ht@marbox
\ifdim@tempdima >\z@
@latex@warning@no@line {Marginpar on page \thepage\space moved}%
\else
@tempdima\z@
\fi
\global@mparbottom@pageht
\global\advance@mparbottom@tempdima
\global\advance@mparbottom\dp@marbox
\global\advance@mparbottom\marginparpush
\advance@tempdima -\ht@marbox
\global\setbox @marbox
\vbox {\vskip @tempdima
\box @marbox}%
\global \ht@marbox \z@
\global \dp@marbox \z@
\kern -@pagedp
\nointerlineskip
\hb@xt@\columnwidth
{\ifnum @tempcnta >\z@
\hskip\columnwidth \hskip\marginparsep
\else
\hskip -\marginparsep \hskip -\marginparwidth
\fi
\box@marbox \hss}%
\nointerlineskip
\hbox{\vrule @height\z@ @width\z@ @depth@pagedp}}
\makeatother
\def\z{\stepcounter{enumi}\theenumi, one two three four five. Red blue Green. }
\def\zz{\z\z Sone text\marginpar{some text in the margin} with a note. }
\def\zzz{\zz\z\z\zz}
\begin{document}
\zzz \zz \zz \zzz
\z\z\zzz\zz \z\z\zzz\zz
\zz\z\zzz \zz\z\zzz
\end{document}