To solve the optimization problem described, we first need to convert the natural language description into a symbolic representation. This involves defining variables, an objective function, and constraints using mathematical notation.

Given:
- Variables: `x0` for milligrams of potassium, `x1` for milligrams of magnesium.
- Objective Function: Minimize `4*x0 + 5*x1`.
- Constraints:
  1. Digestive support index for potassium: `23*x0`.
  2. Cognitive performance index for potassium: `24*x0`.
  3. Digestive support index for magnesium: `14*x1`.
  4. Cognitive performance index for magnesium: `28*x1`.
  5. Total combined digestive support index ≥ 39: `23*x0 + 14*x1 ≥ 39`.
  6. Total combined cognitive performance index ≥ 125: `24*x0 + 28*x1 ≥ 125`.
  7. Constraint on potassium and magnesium: `x0 - 8*x1 ≥ 0`.
  8. Maximum total combined digestive support index ≤ 58: `23*x0 + 14*x1 ≤ 58`.
  9. Maximum total combined cognitive performance index ≤ 219: `24*x0 + 28*x1 ≤ 219`.

Symbolic Representation:
```json
{
    'sym_variables': [('x0', 'milligrams of potassium'), ('x1', 'milligrams of magnesium')],
    'objective_function': '4*x0 + 5*x1',
    'constraints': [
        '23*x0 + 14*x1 >= 39',
        '24*x0 + 28*x1 >= 125',
        'x0 - 8*x1 >= 0',
        '23*x0 + 14*x1 <= 58',
        '24*x0 + 28*x1 <= 219'
    ]
}
```

Now, let's implement this problem in Gurobi Python:

```python
from gurobipy import *

# Create a new model
m = Model("Optimization_Problem")

# Define variables
x0 = m.addVar(vtype=GRB.CONTINUOUS, name="milligrams_of_potassium")
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="milligrams_of_magnesium")

# Set objective function
m.setObjective(4*x0 + 5*x1, GRB.MINIMIZE)

# Add constraints
m.addConstr(23*x0 + 14*x1 >= 39, "digestive_support_index")
m.addConstr(24*x0 + 28*x1 >= 125, "cognitive_performance_index_min")
m.addConstr(x0 - 8*x1 >= 0, "potassium_magnesium_constraint")
m.addConstr(23*x0 + 14*x1 <= 58, "digestive_support_index_max")
m.addConstr(24*x0 + 28*x1 <= 219, "cognitive_performance_index_max")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Milligrams of Potassium: {x0.x}")
    print(f"Milligrams of Magnesium: {x1.x}")
    print(f"Objective Function Value: {m.objVal}")
else:
    print("No optimal solution found")
```