The simplest trick for this data set is to treat the second column is a version number.
$ cat Data3 | sort -k2,2V -t'|'
Help Text|50001/100/7
My Message|50001/100/7
Visible Text|50001/100/52
Text Message|50001/100/63
Invisible Text|50002/100/1
Help Message|50002/100/11
My Text|50002/100/43
However, that doesn't always work depending on your input. This will work because the values in the second column are the same.
You could do what fedorqui suggested and run sort twice and the second time you do a stable sort. From the manpage: -s, --stable (stabilize sort by disabling last-resort comparison)
First sort on the secondary sort criteria. Then do a stable sort, which is keep the sort order within the rows that share the same key from the primary sort criteria.
$ cat Data3 | sort -k3,3n -t'/' | sort -k2,2n -t'|' -s
Help Text|50001/100/7
My Message|50001/100/7
Visible Text|50001/100/52
Text Message|50001/100/63
Invisible Text|50002/100/1
Help Message|50002/100/11
My Text|50002/100/43
You are a bit lucky in this case since -k2,2n -t'|' will treat the second column "50001/100/7" as a number, which will probably be 50001. You could end up in weird situations if that would be comma-separated instead of slash and you were using a different locale in your environment. For instance, default in my environment I run en_US.UTF-8 which behaves like this.
$ cat Data3 | tr '/' ',' | sort -k3,3n -t',' | LC_NUMERIC=en_US.UTF-8 sort -k2,2n -t'|' -s
Help Text|50001,100,7
My Message|50001,100,7
Invisible Text|50002,100,1
Visible Text|50001,100,52
Text Message|50001,100,63
Help Message|50002,100,11
My Text|50002,100,43
What you would expect is this:
$ cat Data3 | tr '/' ',' | sort -k3,3n -t',' | LC_NUMERIC=C sort -k2,2n -t'|' -s
Help Text|50001,100,7
My Message|50001,100,7
Visible Text|50001,100,52
Text Message|50001,100,63
Invisible Text|50002,100,1
Help Message|50002,100,11
My Text|50002,100,43
sortagain?