Я думаю, что вам нужно выполнить некоторую кодировку ... Вы, кажется, хотите использовать & как разделитель, так и как данные без необходимости экранирования. Простой парсер не сможет определить, какое использование вы имеете в виду (например, когда вы пытались использовать метод ParseQueryString).
Если вы знаете, каковы ваши возможные имена элементов (например, workarea, sub), вы можете использовать это, чтобы более точно определить, какие & являются разделителями, а какие - данными, предполагая, что любой &, за которым следует имя элемента, является разделителем, а любой другие нет. Я думаю, что это входит в сферу "возни с манипуляциями со строками", хотя ...
Тем не менее, мой первый путь действий будет состоять в том, чтобы изменить мою входную строку, если это возможно, чтобы сделать ее более четкой и менее двусмысленной.