Generally, it's a bad idea to store "raw data" in a DB, particularly if it holds multiple item values - it's better to process it at source and store is as separate items in a linked table.
But ... try this Regex:
Then it's easy to get KeyValuePairs from it:
string pattern = @"(?:\d+0\^)(.+?)(?:\^)([\d\.]+)";
string input = @"^Rear Payoff Gear ... string from your code ... Torque^40%";
Regex regex = new Regex(pattern);
MatchCollection m = regex.Matches(input);
List<KeyValuePair<string, string>> x = m.Cast<Match>().Select(k => new KeyValuePair<string, string>(k.Groups.Value, k.Groups.Value)).ToList();