Best way to create custom fields that can be used across multiple modules

Best way to create custom fields that can be used across multiple modules

Video outlining problem: https://www.loom.com/share/0ac2f009f5b5426a9521fa3e439adfd7

I need to store multiple custom fields including currency fields, percentage fields and text fields related to an Account record. Field examples below:
  1. Deposit USD (currency field)
  2. Baseline GP GBP (currency field)
  3. Baseline GP % (percentage field)
  4. Target Revenue (pick list field)
  5. Referred by (single line text field)

I want to be able to display this information across other modules:

  1. Contacts Module
    1. I want to be able to view all custom fields in the contacts module when viewing a contact related to account
    2. I want to be able to edit the custom field i.e. Deposit USD in the contacts record and have the update appear in the accounts record
  2. Deal Module
    1. When I create a deal I want all custom fields to be copied across into the deal record
  3. Invoices Module
    1. When I create an invoice I want all custom fields to be copied across into the deal record
What is the most efficient way to make this happen?