In my own tests, the NSOrderedSet version not only preserves the original order of items but is also slightly faster than the NSSet one.
Somewhere between them in speed (surprisingly), but producing the same quasi-random order as NSSet, are these:
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
set aList to {"a", "a", "a", "b", 1, "a", "b", 5.6, "a", "e", "f", "a", "a", "a", "b", "b", "b", "b", "b", "b"}
set anArray to current application's class "NSArray"'s arrayWithArray:(aList)
set aList to (anArray's valueForKeyPath:("@distinctUnionOfObjects.self")) as list
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
set aList to {"a", "a", "a", "b", 1, "a", "b", 5.6, "a", "e", "f", "a", "a", "a", "b", "b", "b", "b", "b", "b"}
set anArray to current application's class "NSArray"'s arrayWithObject:(aList)
set aList to (anArray's valueForKeyPath:("@distinctUnionOfArrays.self")) as list