I can't set the fields to "unstored" or they will no longer appear in the portal in which they are regularly viewed.
Why is that? are you using the field as a match field in the relationship on which the portal is based? If this is FileMaker 11 or newer, you might choose not to use this field as a relationship match field and filter the portal with a portal filter instead. Then this field can be unstored.
Otherwise, you'd need to use the OnFirstWindowOpen script trigger that you can set in File Options... to perform a script that finds and updates all of these records.
(Many versions ago, we had a function called "Today" that could be used in a stored, indexed calculation field to refer to Today's date and would correctly update the result with each new day. Sounds like a great idea right? Well, it had a problem. In order to work, a special routine kicked in every time the file was opened that looped through every record in the table and re-evaluated any calculation field at used this function--sometimes bringing the entire system to its knees for an extended period of time if the table had a lot of records in it.)
I was using the Complete field as a match field in order to alternate between viewing the completed and uncompleted tasks in the portal. This was done by setting the sortFilter field equal to "Completed" or "Not Done". Would it be possible to use a portal filter in the same way, to alternate between views?
Do it all the time.
LayoutTable::SortField = PortalTable::SortFilter
Change the value of LayoutTable::SortField back and forth between the values of "completed" and "not done". Commit records between each change and do not make this field a global field. (If you want to do that, we have to do a few extra tricks in order to get the portal to update.)