OP has confirmed that the following query is much faster (after they corrected my mistake :0)
select A.* from [myTable] A
INNER JOIN (select referencecode, max(myTable.[version]) as [version] from [myTable] group by referencecode) B
ON B.referencecode = A.referencecode AND A.[version]=B.[version]
order by A.referencecode
I said in my comment that "Joins are always faster than ... sub-queries" - that is not strictly true. It's true in this case because the original query was using a correlated sub-query - i.e. it was referencing the outer query ...
select * from [mytable] where ((([mytable].version)=(select max(x.version) from [mytable] as x where x.referencecode = [mytable].referencecode))) order by referencecode;
See
Correlated subquery - Wikipedia[
^]