For the Kobo, what you are doing will work. I use a tag-like column for ad hoc shelves.
You can also use the tags columns, though that can produce a lot of shelves. A custom column based on the tags column will work. An example of this would be a column using the following template:
Code:
{tags:'list_intersection($, "SciFi, Mystery", ",")'}
With that, you would get "SciFi" and "Mystery" shelves and if you have a SciFi Mystery, it would be in both.