That seems to work just as fast. Never crossed my mind that embedded scripts in an App would be as fast as that.
Both your version and my approach took 168 seconds for 100 loops, a dead heat. However, yours is a simpler approach.
property TheVoices : {"Alex", "Fred", "Vicki"}
on run
run script myscript
end run
script myscript
tell application "VoiceOver Utility"
activate
tell application "System Events" to tell process "VoiceOver Utility"
tell window "VoiceOver Utility"
select row 3 of table 1 of scroll area 1
select radio button "Voices" of tab group 1 of group 1
click pop up button 1 of tab group 1 of group 1
set TempVoice to get value of pop up button 1 of tab group 1 of group 1
set COV to count of TheVoices
repeat with x from 1 to COV
if item x of TheVoices = TempVoice then
if x = COV then
set theVoice to item 1 of TheVoices
else
set theVoice to item (x + 1) of TheVoices
end if
exit repeat
end if
end repeat
click menu item theVoice of menu 1 of pop up button 1 of tab group 1 of group 1
click button 1
say theVoice using theVoice
end tell
end tell
end tell
end script