You have several options:
- You can use the DynamicRouter with PHPCR or ORM routes that point to your products. There can be as many routes per documents as you want. They can be named anything, so to enforce your naming pattern you would need some coding. If your products can provide the routes that refer to them, the DynamicRouter can even generate the URL directly from the product. The drawback is that you will need to store a database entry per product.
- You can write your own RouteProvider that generates the route objects from your products. The RouteProviderInterface has only a few methods, and i would hope it should be easy to implement in your case.
- Did you look into Sylius? https://github.com/Sylius/Sylius/pull/255 tries to add the cmf routing component to sylius. Maybe you can work off that, or at least use it as inspiration.
- You could also implement your own RouterInterface and use the ChainRouter to hook it into the routing process, but that is probably overkill.