You can do this with the following command:
:sort /^\^\s*\(# \)\?/
This skips the #
if it exists, and then sorts on the remainder of the line. However, the pattern matches every line, so all lines are sorted into a single group.
You will want to add a range to the start of the command to apply this to the appropriate lines in your file.
The following command also works, coming at it from the opposite direction:
:sort r /\\s*\(# \)\?\zs.*/
Instead of skipping the matched part of the line, this sorts on the matched part, but we use \zs
to exclude the #
from the match, if it exists.