There are some easy (compromise) ways to optimize split:
1. Check if the regex argument actually contains some "regex specific characters" and if it doesn't, do a straightforward split without converting to strings.
2. Assume some default value for the second argument (for example - split(str) to be equivalent to split(str, ' ') and optimize for this value
3. Have two separate split functions - one that does regex and one that splits around plain text.
I think that 1 is a good choice and can be done rather quickly.