Sadly, Drupal's node access rights system does not support such granularity.
But, using an implementation of
hook_node_view_alter() to alter the renderable array used to view a node in any context that uses
node_view() (like the /node/%nid pages do), you can ensure that anonymous users don't have access to full view of a node (ie.
$build[view_mode] == 'full'). To disable an element, simply set it
#access property to
FALSE. For some of them (
body), it should also be possible to alter the theme variable to, for instance, render them as teaser text (vs. full text).
In order to support full content indexation by external search engine (such as Google), you will need to disable page caching. Otherwise, a search engine indexer may see an incomplete page generated for a normal anonymous, or the reverse. You also have to find a way to instruct Drupal to produce an authenticated user page when the request comes from a search engine indexer. If you use custom code to disabled full rendering of the body (like I suggest), you can do this be having a condition that only filter out anonymous users who are not indexers. Another solution may be to find a trick to lure Drupal into automatically logging search engine bot as special authenticated user (but I don't known how).