Non-solid brushes typically don't create visportals because they presumably don't block visibility. If you only have a few of these collections of brushes you need to make non-solid, a func_brush with its solidity disabled would be suitable. Alternatively you could turn them into props, or create special VMTs with the '%CompileNonSolid 1' parameter, and tie them to func_detail.
You don't normally need to worry about reducing visportals unless either: 1. You have a high density of very small leaves in a small area, caused by fine brush detail. 2. You have a very large open area and despite the fact your visleaves are large, there are a lot of them and they can all see each other.
func_detail can cause ugly shading, and its unseen/covered faces don't always get split and culled. As alternative to tying brushes to func_detail you can place a func_viscluster (textured with 'trigger') over the brushwork. It causes all leaves touched by it to merge into one. A useful tool when used with proper understanding and consideration of visibility.