Simplemente haz un ordenamiento basado en el índice de elementos obtenidos partiendo cada elemento por el caracter delimitador ";", una forma de aplicar de manera simplificada lo que acabo de mencionar sería usando LINQ:
Dim items As String() = {
"052;Juan;Lopez;México",
"101;Enrique;Morales;Guatemala",
"005;John;McCain;USA",
"034;María;Delgado;España"
}
Dim sorted As IEnumerable(Of String) =
From item As String In items
Order By item.Split(";"c)(0)
For Each item As String In sorted
Console.WriteLine(item)
Next
Pero, la solución más apropiada sería que no uses un Array, sino una colección de un tipo personalizado donde encapsular la información de manera "individual" u organizada, como por ejemplo...:
<Serializable>
Public NotInheritable Class Person
Public ReadOnly Property Index As String
Public ReadOnly Property Name As String
Public ReadOnly Property Surname As String
Public ReadOnly Property Country As String
<DebuggerNonUserCode>
Private Sub New()
End Sub
<DebuggerStepThrough>
Public Sub New(ByVal index As String,
ByVal name As String,
ByVal surname As String,
ByVal country As String)
Me.Index = index
Me.Name = name
Me.Surname = surname
Me.Country = country
End Sub
End Class
Dim persons As New List(Of Person)
persons.Add(New Person("052", "Juan", "Lopez", "México"))
...
Y entonces, para ordenar ascendentemente puedes specificar la propiedad que desees:
Dim sorted As List(Of Person) =
persons.OrderBy(Function(p As Person) p.Country).ToList()
Saludos.