I'm not entirely sure the problem but it's likely caused by @BindParameter which is likely invoking the binding each access.
Try @InjectContainer Grid grid; And grid.getDataSource(). This will give you an instance of CachingDataSource which should have the lazy behaviour you want.