In your question you assume you will use only VAOs. In recent OpenGL versions VAOs are mandatory, but you can live without VAOs (just bind 1 VAO at initialization time and then you forget about it: this solution is widely used).
Is faster using a VAO for each VBO, or calling glVertexAttribPointer for each VBO? This is driver dependent. The risk you incurr when optimizing for one driver is to make things slower for another driver.
Is faster using many VBOs or few VBOs (it is not dependent on your VAO)? It depends on your bottleneck:
Increasing number of VBOs may help to do frustum culling or occlusion culling effectively reducing the workload for the GPU (less overdraw and fewer primitives to process), but too many VBOs may result in worst case in much more drawcalls wich would slow down things anyway.
There is no better solution, it all depends on your problem and profiling.