diff --git a/core/modules/layout_builder/config/install/layout_builder.settings.yml b/core/modules/layout_builder/config/install/layout_builder.settings.yml
new file mode 100644
index 0000000000..43521763c7
--- /dev/null
+++ b/core/modules/layout_builder/config/install/layout_builder.settings.yml
@@ -0,0 +1 @@
+expose_all_field_blocks: false
diff --git a/core/modules/layout_builder/config/schema/layout_builder.schema.yml b/core/modules/layout_builder/config/schema/layout_builder.schema.yml
index 7bc4461891..ed0bbf7893 100644
--- a/core/modules/layout_builder/config/schema/layout_builder.schema.yml
+++ b/core/modules/layout_builder/config/schema/layout_builder.schema.yml
@@ -82,3 +82,11 @@ layout_plugin.settings.layout_twocol_section:
 
 layout_plugin.settings.layout_threecol_section:
   type: layout_builder_multi_width
+
+layout_builder.settings:
+  type: config_object
+  label: 'Layout builder settings'
+  mapping:
+    expose_all_field_blocks:
+      type: boolean
+      label: 'Expose all field blocks'
diff --git a/core/modules/layout_builder/layout_builder.info.yml b/core/modules/layout_builder/layout_builder.info.yml
index ccf4e273d6..ef39e21e1d 100644
--- a/core/modules/layout_builder/layout_builder.info.yml
+++ b/core/modules/layout_builder/layout_builder.info.yml
@@ -1,6 +1,7 @@
 name: 'Layout Builder'
 type: module
 description: 'Allows users to add and arrange blocks and content fields directly on the content.'
+configure: layout_builder.settings
 package: Core
 version: VERSION
 dependencies:
diff --git a/core/modules/layout_builder/layout_builder.links.menu.yml b/core/modules/layout_builder/layout_builder.links.menu.yml
new file mode 100644
index 0000000000..018db60968
--- /dev/null
+++ b/core/modules/layout_builder/layout_builder.links.menu.yml
@@ -0,0 +1,5 @@
+layout_builder.settings:
+  title: 'Layout Builder'
+  parent: system.admin_config_content
+  description: 'Configure Layout Builder settings.'
+  route_name: layout_builder.settings
diff --git a/core/modules/layout_builder/layout_builder.permissions.yml b/core/modules/layout_builder/layout_builder.permissions.yml
index 072f620e05..8ccf5f0fee 100644
--- a/core/modules/layout_builder/layout_builder.permissions.yml
+++ b/core/modules/layout_builder/layout_builder.permissions.yml
@@ -1,3 +1,6 @@
+administer layout builder:
+  title: 'Administer layout builder'
+  restrict access: true
 configure any layout:
   title: 'Configure any layout'
   restrict access: true
diff --git a/core/modules/layout_builder/layout_builder.post_update.php b/core/modules/layout_builder/layout_builder.post_update.php
index 04d2139cf7..da7d7c96a3 100644
--- a/core/modules/layout_builder/layout_builder.post_update.php
+++ b/core/modules/layout_builder/layout_builder.post_update.php
@@ -73,3 +73,13 @@ function layout_builder_post_update_section_storage_context_mapping(&$sandbox =
 function layout_builder_post_update_tempstore_route_enhancer() {
   // Empty post-update hook.
 }
+
+/**
+ * Configure the default expose all fields setting.
+ */
+function layout_builder_post_update_default_expose_field_block_setting() {
+  $config_factory = \Drupal::configFactory();
+  $layout_builder_settings = $config_factory->getEditable('layout_builder.settings');
+  $layout_builder_settings->set('expose_all_field_blocks', TRUE)
+    ->save(TRUE);
+}
diff --git a/core/modules/layout_builder/layout_builder.routing.yml b/core/modules/layout_builder/layout_builder.routing.yml
index 6dcf0c9f05..c3812c390c 100644
--- a/core/modules/layout_builder/layout_builder.routing.yml
+++ b/core/modules/layout_builder/layout_builder.routing.yml
@@ -1,3 +1,11 @@
+layout_builder.settings:
+  path: '/admin/config/content/layout-builder'
+  defaults:
+    _form: '\Drupal\layout_builder\Form\LayoutBuilderSettingsForm'
+    _title: 'Layout Builder'
+  requirements:
+    _permission: 'administer layout builder'
+
 layout_builder.choose_section:
   path: '/layout_builder/choose/section/{section_storage_type}/{section_storage}/{delta}'
   defaults:
diff --git a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
index d543fe1619..92c5057cf3 100644
--- a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
+++ b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
@@ -156,6 +156,10 @@ public function preSave(EntityStorageInterface $storage) {
         // When being disabled, remove all existing section data.
         $this->removeAllSections();
       }
+
+      // Invalidate the block cache in order to regenerate field block
+      // definitions.
+      \Drupal::service('plugin.manager.block')->clearCachedDefinitions();
     }
   }
 
diff --git a/core/modules/layout_builder/src/Form/LayoutBuilderSettingsForm.php b/core/modules/layout_builder/src/Form/LayoutBuilderSettingsForm.php
new file mode 100644
index 0000000000..7523d7c45e
--- /dev/null
+++ b/core/modules/layout_builder/src/Form/LayoutBuilderSettingsForm.php
@@ -0,0 +1,93 @@
+<?php
+
+namespace Drupal\layout_builder\Form;
+
+use Drupal\Core\Block\BlockManagerInterface;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Form\ConfigFormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Configure layout builder settings for this site.
+ *
+ * @internal
+ */
+class LayoutBuilderSettingsForm extends ConfigFormBase {
+
+  /**
+   * The block plugin manager.
+   *
+   * @var \Drupal\Core\Block\BlockManagerInterface
+   */
+  protected $blockManager;
+
+  /**
+   * Constructs a \Drupal\aggregator\SettingsForm object.
+   *
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The factory for configuration objects.
+   * @param \Drupal\Core\Block\BlockManagerInterface $block_manager
+   *   The block plugin manager.
+   */
+  public function __construct(ConfigFactoryInterface $config_factory, BlockManagerInterface $block_manager) {
+    parent::__construct($config_factory);
+    $this->blockManager = $block_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory'),
+      $container->get('plugin.manager.block')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'layout_builder_settings';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getEditableConfigNames() {
+    return ['layout_builder.settings'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $config = $this->config('layout_builder.settings');
+
+    $form['expose_all_field_blocks'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Expose all fields as blocks to layout builder'),
+      '#default_value' => $config->get('expose_all_field_blocks'),
+      '#description' => $this->t('Fields in layout builder enabled displays are always exposed. This setting exposes all fields for all displays. Use with caution, it has significant performance impacts.'),
+    ];
+
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $values = $form_state->getValues();
+
+    $config = $this->config('layout_builder.settings');
+    $config->set('expose_all_field_blocks', $values['expose_all_field_blocks'])
+      ->save();
+
+    $this->blockManager->clearCachedDefinitions();
+
+    parent::submitForm($form, $form_state);
+  }
+
+}
diff --git a/core/modules/layout_builder/src/Plugin/Derivative/ExtraFieldBlockDeriver.php b/core/modules/layout_builder/src/Plugin/Derivative/ExtraFieldBlockDeriver.php
index 8de394c349..0c3eded435 100644
--- a/core/modules/layout_builder/src/Plugin/Derivative/ExtraFieldBlockDeriver.php
+++ b/core/modules/layout_builder/src/Plugin/Derivative/ExtraFieldBlockDeriver.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Plugin\Derivative\DeriverBase;
 use Drupal\Component\Plugin\PluginBase;
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
@@ -52,6 +53,13 @@ class ExtraFieldBlockDeriver extends DeriverBase implements ContainerDeriverInte
    */
   protected $entityTypeRepository;
 
+  /**
+   * The config factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
   /**
    * Constructs new FieldBlockDeriver.
    *
@@ -63,12 +71,15 @@ class ExtraFieldBlockDeriver extends DeriverBase implements ContainerDeriverInte
    *   The entity type bundle info.
    * @param \Drupal\Core\Entity\EntityTypeRepositoryInterface $entity_type_repository
    *   The entity type repository.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory.
    */
-  public function __construct(EntityFieldManagerInterface $entity_field_manager, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info, EntityTypeRepositoryInterface $entity_type_repository) {
+  public function __construct(EntityFieldManagerInterface $entity_field_manager, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info, EntityTypeRepositoryInterface $entity_type_repository, ConfigFactoryInterface $config_factory) {
     $this->entityFieldManager = $entity_field_manager;
     $this->entityTypeManager = $entity_type_manager;
     $this->entityTypeBundleInfo = $entity_type_bundle_info;
     $this->entityTypeRepository = $entity_type_repository;
+    $this->configFactory = $config_factory;
   }
 
   /**
@@ -79,7 +90,8 @@ public static function create(ContainerInterface $container, $base_plugin_id) {
       $container->get('entity_field.manager'),
       $container->get('entity_type.manager'),
       $container->get('entity_type.bundle.info'),
-      $container->get('entity_type.repository')
+      $container->get('entity_type.repository'),
+      $container->get('config.factory')
     );
   }
 
@@ -88,14 +100,26 @@ public static function create(ContainerInterface $container, $base_plugin_id) {
    */
   public function getDerivativeDefinitions($base_plugin_definition) {
     $entity_type_labels = $this->entityTypeRepository->getEntityTypeLabels();
+    $enabled_bundle_ids = $this->bundleIdsWithLayoutBuilderDisplays();
+    $expose_all_fields = $this->configFactory->get('layout_builder.settings')->get('expose_all_field_blocks');
     foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) {
       // Only process fieldable entity types.
       if (!$entity_type->entityClassImplements(FieldableEntityInterface::class)) {
         continue;
       }
 
+      // If not loading everything, skip entity types that aren't included.
+      if (!$expose_all_fields && !isset($enabled_bundle_ids[$entity_type_id])) {
+        continue;
+      }
+
       $bundles = $this->entityTypeBundleInfo->getBundleInfo($entity_type_id);
       foreach ($bundles as $bundle_id => $bundle) {
+        // If not loading everything, skip bundle types that aren't included.
+        if (!$expose_all_fields && !isset($enabled_bundle_ids[$entity_type_id][$bundle_id])) {
+          continue;
+        }
+
         $extra_fields = $this->entityFieldManager->getExtraFields($entity_type_id, $bundle_id);
         // Skip bundles without any extra fields.
         if (empty($extra_fields['display'])) {
@@ -123,4 +147,23 @@ public function getDerivativeDefinitions($base_plugin_definition) {
     return $this->derivatives;
   }
 
+  /**
+   * Entity and bundle machine names with layout builder enabled.
+   *
+   * @return array
+   *   A structured array with entity type as first key, bundle as second.
+   */
+  protected function bundleIdsWithLayoutBuilderDisplays() {
+    /** @var \Drupal\layout_builder\Entity\LayoutEntityDisplayInterface[] $displays */
+    $displays = $this->entityTypeManager->getStorage('entity_view_display')->loadByProperties([
+      'third_party_settings.layout_builder.enabled' => TRUE,
+    ]);
+    $layout_bundles = [];
+    foreach ($displays as $display) {
+      $bundle = $display->getTargetBundle();
+      $layout_bundles[$display->getTargetEntityTypeId()][$bundle] = $bundle;
+    }
+    return $layout_bundles;
+  }
+
 }
diff --git a/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php b/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php
index a2a94a024d..8f1c8ac154 100644
--- a/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php
+++ b/core/modules/layout_builder/src/Plugin/Derivative/FieldBlockDeriver.php
@@ -4,6 +4,8 @@
 
 use Drupal\Component\Plugin\Derivative\DeriverBase;
 use Drupal\Component\Plugin\PluginBase;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\Entity\ConfigEntityStorageInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Core\Field\FieldConfigInterface;
@@ -53,6 +55,20 @@ class FieldBlockDeriver extends DeriverBase implements ContainerDeriverInterface
    */
   protected $formatterManager;
 
+  /**
+   * The entity view display storage.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
+   */
+  protected $entityViewDisplayStorage;
+
+  /**
+   * The config factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
   /**
    * Constructs new FieldBlockDeriver.
    *
@@ -64,12 +80,18 @@ class FieldBlockDeriver extends DeriverBase implements ContainerDeriverInterface
    *   The field type manager.
    * @param \Drupal\Core\Field\FormatterPluginManager $formatter_manager
    *   The formatter manager.
+   * @param \Drupal\Core\Config\Entity\ConfigEntityStorageInterface $entity_view_display_storage
+   *   The entity view display storage.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory.
    */
-  public function __construct(EntityTypeRepositoryInterface $entity_type_repository, EntityFieldManagerInterface $entity_field_manager, FieldTypePluginManagerInterface $field_type_manager, FormatterPluginManager $formatter_manager) {
+  public function __construct(EntityTypeRepositoryInterface $entity_type_repository, EntityFieldManagerInterface $entity_field_manager, FieldTypePluginManagerInterface $field_type_manager, FormatterPluginManager $formatter_manager, ConfigEntityStorageInterface $entity_view_display_storage, ConfigFactoryInterface $config_factory) {
     $this->entityTypeRepository = $entity_type_repository;
     $this->entityFieldManager = $entity_field_manager;
     $this->fieldTypeManager = $field_type_manager;
     $this->formatterManager = $formatter_manager;
+    $this->entityViewDisplayStorage = $entity_view_display_storage;
+    $this->configFactory = $config_factory;
   }
 
   /**
@@ -80,7 +102,9 @@ public static function create(ContainerInterface $container, $base_plugin_id) {
       $container->get('entity_type.repository'),
       $container->get('entity_field.manager'),
       $container->get('plugin.manager.field.field_type'),
-      $container->get('plugin.manager.field.formatter')
+      $container->get('plugin.manager.field.formatter'),
+      $container->get('entity_type.manager')->getStorage('entity_view_display'),
+      $container->get('config.factory')
     );
   }
 
@@ -89,7 +113,7 @@ public static function create(ContainerInterface $container, $base_plugin_id) {
    */
   public function getDerivativeDefinitions($base_plugin_definition) {
     $entity_type_labels = $this->entityTypeRepository->getEntityTypeLabels();
-    foreach ($this->entityFieldManager->getFieldMap() as $entity_type_id => $entity_field_map) {
+    foreach ($this->getFieldMap() as $entity_type_id => $entity_field_map) {
       foreach ($entity_field_map as $field_name => $field_info) {
         // Skip fields without any formatters.
         $options = $this->formatterManager->getOptions($field_info['type']);
@@ -135,4 +159,50 @@ public function getDerivativeDefinitions($base_plugin_definition) {
     return $this->derivatives;
   }
 
+  /**
+   * Returns the entity field map for deriving block definitions.
+   *
+   * @return array
+   *   The entity field map.
+   *
+   * @see \Drupal\Core\Entity\EntityFieldManagerInterface::getFieldMap()
+   */
+  protected function getFieldMap() {
+    $field_map = $this->entityFieldManager->getFieldMap();
+
+    // If all fields are exposed as field blocks, just return the field map
+    // without any further processing.
+    if ($this->configFactory->get('layout_builder.settings')->get('expose_all_field_blocks')) {
+      return $field_map;
+    }
+
+    // Load all entity view displays which are using Layout Builder.
+    /** @var \Drupal\layout_builder\Entity\LayoutEntityDisplayInterface[] $displays */
+    $displays = $this->entityViewDisplayStorage->loadByProperties([
+      'third_party_settings.layout_builder.enabled' => TRUE,
+    ]);
+    $layout_bundles = [];
+    foreach ($displays as $display) {
+      $bundle = $display->getTargetBundle();
+      $layout_bundles[$display->getTargetEntityTypeId()][$bundle] = $bundle;
+    }
+
+    // Process $field_map, removing any entity types which are not using Layout
+    // Builder.
+    $field_map = array_intersect_key($field_map, $layout_bundles);
+
+    foreach ($field_map as $entity_type_id => $fields) {
+      foreach ($fields as $field_name => $field_info) {
+        $field_map[$entity_type_id][$field_name]['bundles'] = array_intersect($field_info['bundles'], $layout_bundles[$entity_type_id]);
+
+        // If no bundles are using Layout Builder, remove this field from the
+        // field map.
+        if (empty($field_info['bundles'])) {
+          unset($field_map[$entity_type_id][$field_name]);
+        }
+      }
+    }
+    return $field_map;
+  }
+
 }
